Я хочу получить все результаты обычного поиска в Google.
Мне нужна помощь в определении XPath для исключения объявлений. Тег cite в объявлениях не содержит атрибут класса, а в органических результатах есть два разных значения класса. Мои попытки определить XPath не удались. Страница результатов Google выглядит примерно так:
Ad
<cite>example.com</cite>
Organic Result 1
<cite class="_Rm">example.com/page1.html</cite>
Organic Result 2
<cite class="_Rm bc">example.com > Breadcrumbs > Page2</cite>
Вот мой код:
$html = new DOMDocument();
@$html->loadHtmlFile('http://www.google.com/search?q=mortgage&num=100');
$xpath = new DOMXPath($html);
$nodes = $xpath->query('//cite');
foreach ($nodes as $n){
echo $n->nodeValue.'<br />'; // Show all links
}
Пожалуйста помоги
Предполагая, что часть HTML, которую вы хотите получить, не генерируется клиентскими сценариями (обычно javascript), следующий простой XPath выполнит эту работу:
$nodes = $xpath->query('//cite[@class]');
Выше XPath получает все теги <cite>
содержащие атрибут класса с любым значением.
В противном случае вам нужно найти способ запуска клиентских сценариев, чтобы HTML можно было сгенерировать полностью, прежде чем вы сможете применить выше запрос XPath к HTML.
Попробуйте //cite[@class='_Rm' or @class='_Rm bc']
Это будет выбрать cite
узлы с классом, который либо _Rm
или _RM bc
.