蟒蛇。某些XPath表达式不起作用

时间:2016-05-02 14:24:15

标签: python xml xpath web-scraping xpath-2.0

我一直在通过Python体验XPath。

问题在于并非所有表达都有效。

我刚刚找到 XPath帮助 chrome扩展程序。

正如您所看到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列表为空。为什么?它应该包含我在Xpath中指示的所有td

2 个答案:

答案 0 :(得分:1)

不知何故,只是略有不同的问题,一次又一次地得到同样的问题变得很烦人  问题是(并且这不会改变)页面上的html完全被破坏了。所以你需要开始接受浏览器,lxml或BeautifulSoup之间的DOM解释是不同的。我建议将soup字符串保存到文件中,试图弄清楚BeautifulSoup对破解的html做了什么。 有了这个,你可以弄清楚正确的xpath是什么(如果有的话)。

答案 1 :(得分:0)

当这些表中不存在tbody标记时,您的xpath正在使用tbody作为选择器的一部分。您的浏览器在呈现页面时会填充tbody个部分,因为它们是规范的必需部分,但是如果您查看源代码,您会发现它们实际上并不存在。

不要相信浏览器看到的内容。特别是如果你启用了javascript。你经常会得到一些页面,其中元素树与简单requests.get()将会看到的完全不同。