#php #xpath
#php #xpath
Вопрос:
Кажется, я не могу получить свой запрос xpath, чтобы найти его.
$pathTemplate = "https://www.google.com/finance?q=";
echo "Enter the stock symbol of the stock you want to checkn";
$foo = fgets(STDIN);
$html = new DOMDocument();
$html -> loadHTML($pathTemplate . $foo);
$xpath = new DOMXPath($html);
$price = $xpath -> query("//span[@class = 'pr']/span/text()");
echo $price -> item(0);
Комментарии:
1. Вам нужно использовать идентификатор ‘price-panel’.
Ответ №1:
вы должны нормализовать (всегда) классы при использовании xpath, чтобы иметь возможность правильно обрабатывать class="class1 class2"
тег.
лучший способ получить то, что вы хотите, — это нацелиться на ID="price-panel"
первое.
ниже приведен полный рабочий фрагмент, который вы забыли file_get_contents
, поэтому вы пытались проанализировать URL как HTML вместо фактического HTML 😉
$pathTemplate = "https://www.google.com/finance?q=";
echo "Enter the stock symbol of the stock you want to checkn";
$foo = fgets(STDIN);
$html = file_get_contents($pathTemplate . $foo);
$dom = new DOMDocument();
@$dom -> loadHTML($html);
$xpath = new DOMXPath($dom);
$price = $xpath -> query(" //div[@id='price-panel']//span[contains(concat(' ', normalize-space(@class), ' '), ' pr ')]/span");
$price = $price->item(0)->nodeValue;
echo $price;
Комментарии:
1. Как вы решили, что таргетинг на ценовую панель был лучшим выбором действий?
2. вы ищете что-то настолько уникальное, насколько это возможно, и, скорее всего, не сильно изменится. Идентификаторы уникальны, и этот достаточно явный, чтобы вы могли предположить, что он останется неизменным.