使用XPath,Python和Scrapy解析HTML

use*_*058 3 python xpath scrapy

我正在写一个Scrapy程序来提取数据.

这是网址,我想抓取20111028013117(代码)信息.我从FireFox附加XPather中获取了XPath .这是路径:

/html/body/p/table/tbody/tr/td/table[2]/tbody/tr[1]/td/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr/td/table/tbody/tr[2]/td[2]
Run Code Online (Sandbox Code Playgroud)

虽然我正在尝试执行此操作

try:
    temp_list = hxs.select("/html/body/p/table/tbody/tr/td/table[2]/tbody/tr[1]/td/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/table/tbody/tr/td[2]/table[3]/tbody/tr/td/table/tbody/tr[2]/td[2]").extract()
    print "temp_list:" + str(temp_list)
except:
    print "error"
Run Code Online (Sandbox Code Playgroud)

它返回一个空列表,我很难在过去的4个小时内找到答案.我是scrapy的新手,尽管我为其他项目处理的问题非常好,但似乎有点困难.

小智 9

你的xpath不起作用的原因是因为tbody.您必须将其删除并检查是否得到了您想要的结果.

您可以在scrapy文档中阅读:http://doc.scrapy.org/en/0.14/topics/firefox.html

特别是Firefox <tbody>以向表格添加元素而闻名.另一方面,Scrapy不会修改原始页面HTML,因此如果<tbody>在XPath表达式中使用,则无法提取任何数据.

  • Chrome也添加<tbody>.在看到这个答案之后,让我的代码工作了.谢谢! (2认同)