2016-05-02 2 views
1

Я экспериментировал с XPath через Python.Python. Некоторые выражения XPath не работают

Дело в том, что не все выражения работают.

Я только что нашёл XPath helper chrome extension.

Как вы видите, Chrome обнаруживает XPath, но Python этого не делает.

Сайт: link

Xpath detected

Мой код:

import __future__ 
from lxml import html 
import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution') 
soup = str(BeautifulSoup(page.content, 'html.parser')) 


tree = html.fromstring(soup) 
smth = tree.xpath('/html/body/table[@class="center"][2]/tbody/tr[1]/td[2]/table[2]/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/text()') 

print(smth) 

smth список пуст. Зачем? Он должен был состоять из всех td s, указанных в Xpath.

ответ

0

Ваш xpath использует tbody как часть селектора, если в этих таблицах нет меток tbody. Ваш браузер заполняет разделы tbody, когда он отображает страницу, потому что они являются обязательной частью спецификации, но если вы просмотрите источник, вы увидите, что они фактически не существуют.

Не верьте тому, что видит браузер. Особенно, если у вас включен javascript. Вы часто будете сталкиваться со страницами, где дерево элементов не похоже на ваш простой requests.get().

+0

Это означает, что html не работает ??? Как я могу исправить это ... Я думал, что аргумент 'html.parser' от' BeautifulSoup' исправит это. –

1

Как-то это становится раздражающим, чтобы получить ту же проблему снова и снова с только немного разными вопросами.
Проблема (и это не изменится), что html на странице полностью сломан. Поэтому вам нужно начать понимать, что интерпретация DOM отличается от браузера, lxml или BeautifulSoup. Я предлагаю сохранить строку soup в файл, чтобы выяснить, что сделал BeautifulSoup со сломанным html. С этим вы можете выяснить, что (если есть), то правая xpath может быть.

+0

Мне очень жаль. Я понял это сейчас. –

Смежные вопросы