Запрос XPath в документах Google не соответствует исходному коду HTML

Используя XpathBuilder, я могу создать простой запрос поисковой системы и извлечь данные из результатов поиска с помощью XPath. У меня есть несколько простых примеров в электронной таблице Google Doc здесь, которая выполняет запрос " Учебник по XPath» в различных поисковых системах и пытается получить количество результатов, возвращаемых каждой поисковой системой.

Код в этом Google Doc выглядит следующим образом:

=importxml("http://www.google.com/search?q="xpath+tutorial"&num=30&pws=0", 
           "//div[@id='resultStats']")
=importxml("http://www.bing.com/search?q=xpath+tutorial&count=30", 
           "//span[@class='sb_count']")
=importxml("http://search.yahoo.com/search?p=xpath+tutorial&n=30", 
           "//span[@id='resultCount']")

В этом есть некоторые странности, которых я не понимаю. Во-первых, поиск Google не дает никаких результатов, но запрос XPath выглядит нормально. Действительно, существует ряд онлайн-руководств, которые рекомендуют именно то, что я сделал здесь.

Запрос Yahoo возвращает правильный результат, он единственный.

Количество результатов, найденных запросом Bing Xpath, не соответствует результатам, указанным в Bing. веб-страница, хотя существует только один узел XML, соответствующий запросу XPath. Более подробная информация приведена в здесь

Где все пошло так не так?


person snim2    schedule 13.07.2012    source источник
comment
Голосование против, потому что код не показан.   -  person Michael Kay    schedule 13.07.2012
comment
Весь код был в Google Doc, который также показывал результаты и давал некоторые подробности об исходном коде из поисковых систем. Я добавил кое-что из этого к вопросу сейчас.   -  person snim2    schedule 13.07.2012


Ответы (3)


Попробуй это....

=importxml("http://www.google.com/search?q='xpath+tutorial&num=30&pws=0'", "//div[@id='resultStats']")
person Bruce    schedule 21.08.2012
comment
Ничего себе, это сработало. Кажется, что единственная разница между моим кодом и вашим — это дополнительные кавычки вокруг пар ключ/значение в URL-адресе. Спасибо. - person snim2; 22.08.2012

Google, вероятно, не работает из-за незакодированных двойных кавычек в URL-адресе. Поскольку символ-разделитель строки importxml представляет собой двойную кавычку, это, вероятно, не сработает. Закодируйте двойные кавычки в %22.

Насчет Бинга не уверен. Скорее всего, ваш XPath работает, но Bing по какой-то причине возвращает разные результаты вам и Google Docs.

person Alex Bishop    schedule 13.07.2012
comment
Хорошо, я убрал кавычки, так что теперь оператор читается как =importxml("http://www.google.com/search?q=xpath+tutorial&num=30&pws=0", "//div[@id='resultStats']"), а вывод в электронной таблице остается прежним :( - person snim2; 15.07.2012
comment
@snim2 Единственное, что я могу придумать, это то, что страница результатов поиска Google, отправленная в Документы Google (которая может отличаться от той, что вы видите в своем браузере), не содержит div с атрибутом id «resultStats». - person Alex Bishop; 20.07.2012
comment
Это возможно, но я не понимаю, зачем это нужно. Кроме того, это явно /использовалось/ для работы, так как есть куча руководств, которые рекомендуют метод, который я использовал! - person snim2; 22.07.2012

Дьявол кроется в деталях — если вы не покажете нам свой код, мы не сможем найти для вас ваши ошибки.

Однако XPath предназначен для работы с XML, тогда как вы, похоже, используете его с HTML. Таким образом, путаница может заключаться в том, как HTML отображается в XML: например, путем добавления неявных узлов, таких как tbody, свертывания регистра или обработки пространства имен.

person Michael Kay    schedule 13.07.2012
comment
Интересный момент в отношении HTML. Я подозреваю, что именно поэтому запрос Google не работает, но это не объясняет результат от Yahoo. - person snim2; 13.07.2012