使用XPath、Python和Scrapy解析HTML
我正在写一个粗略的程序来提取数据 ,我想抓取使用XPath、Python和Scrapy解析HTML,python,xpath,scrapy,Python,Xpath,Scrapy,我正在写一个粗略的程序来提取数据 ,我想抓取20111028013117(code)信息。我从FireFox插件中获取了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] 当我试着执行这个的时候
20111028013117
(code)信息。我从FireFox插件中获取了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]
当我试着执行这个的时候
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"
它返回的是一个空列表,我在过去4个小时里一直在努力寻找答案。我是scrapy Event的新手,虽然我对其他项目的问题处理得很好,但这似乎有点困难。您是否尝试过在查询结束时删除一些节点标记,然后重新运行,直到得到结果?这样做几次,直到你得到一些东西,然后小心地添加项目,直到查询得到纠正
另外,检查目标页面是否验证为XHTML-无效页面可能会打乱解析器。您可以使用更健壮的XPath而不是直接从XPath获取输出,从而更轻松地提取数据 对于要匹配的数据,此XPath会做得更好:
//font[contains(text(),'Code')]/parent::td/following-sibling::td/font/text()
这将匹配包含“code”的
标记,然后转到它上面的td
标记并选择下一个td
->font
,其中包含您要查找的代码。我看到您要查找的元素在
中
。
这可能是您的xpath查询在浏览器中工作,但在Scrapy中失败的原因
正如建议的那样,在xpath查询中使用其他锚。xpath不起作用的原因是因为
tbody
。你必须移除它,并检查是否得到你想要的结果
您可以在零碎的文档中阅读:
尤其是Firefox,它以在浏览器中添加
元素而闻名
桌子。另一方面,Scrapy不会修改原始页面
HTML,因此如果在中使用
,则无法提取任何数据
您的XPath表达式
谢谢你发布了这些剪贴文档的摘录。Chrome还补充道,建议一种更有效的替代方法可能会改善答案。在我看到这个答案后,我的代码开始工作了。谢谢