Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XPath、Python和Scrapy解析HTML_Python_Xpath_Scrapy - Fatal编程技术网

使用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还补充道,建议一种更有效的替代方法可能会改善答案。在我看到这个答案后,我的代码开始工作了。谢谢