Я использовал метод xpath, предложенный @mightyuhu, и он отлично работал с его добавлением задания. В зависимости от веб-страницы, с которой вы получаете информацию, и наличия идентификатора или класса, который идентифицирует тег, который вы хотите получить, вам придется изменить используемый запрос. Если тегу присвоен идентификатор 'id', вы можете использовать его (образец предназначен для извлечения обменного курса доллара США):
$query = "//div[@id='USD']";
Однако разработчики сайта не упростят нам задачу, поэтому в моем примере будет еще несколько «безымянных» тегов:
<div id="USD" class="tab">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Ask Rate</td>
<td align="right">1.77400</td>
</tr>
<tr class="even">
<td>Bid Rate</td>
<td align="right">1.70370</td>
</tr>
<tr>
<td>BNB Fixing</td>
<td align="right">1.735740</td>
</tr>
</tbody>
</table>
</div>
Поэтому мне пришлось изменить запрос, чтобы получить «Ask Rate»:
$doc->loadHTMLFile('http://www.fibank.bg/en');
$xpath = new DOMXPath($doc);
$query = "//div[@id='USD']/table/tbody/tr/td";
Итак, я использовал запрос выше, но изменил item на 1 вместо 0, чтобы получить второй столбец, где указан обменный курс (первый столбец содержит текст «Ask Rate»):
$entries = $xpath->query($query);
$usdrate = $entries->item(1)->textContent;
Другой метод - ссылаться на значение непосредственно в запросе, который, когда у вас нет имен или стилей, должен выполняться с помощью индексации тегов, что я получил в качестве знания от моего браузера Maxthon и его функции «Проверить элемент» в сочетании с пункт меню "Копировать XPath" справа (аккуратно, да?):
"//*[@id="USD"]/table/tbody/tr[1]/td[2]"
Обратите внимание, что он также вставляет звездочку (*) после //
, в которой я не копался. В этом случае вы должны снова получить значение с item(0)
, поскольку других значений не будет.
При необходимости вы можете внести любые изменения в извлеченную строку, например изменить числовой формат в соответствии с вашими предпочтениями:
$usdrate = number_format($usdrate, 5, ',', ' ');
Я надеюсь, что кто-то сочтет это полезным, поскольку я нашел ответы выше, и сэкономлю этому кому-то время на поиск правильного запроса и синтаксиса.
person
Boyan Alexiev
schedule
28.08.2015
file_get_contents
и др., Покажите свой код и объясните, что не сработало. - person Mike   schedule 08.12.2013DOMDocument
и пройти по дереву с помощьюDOMXPath
. - person Darragh Enright   schedule 08.12.2013