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
Python Scrapy:XPath错误://媒体:内容中的表达式无效_Python_Xpath_Scrapy_Web Crawler - Fatal编程技术网

Python Scrapy:XPath错误://媒体:内容中的表达式无效

Python Scrapy:XPath错误://媒体:内容中的表达式无效,python,xpath,scrapy,web-crawler,Python,Xpath,Scrapy,Web Crawler,我想从新闻站点RSS提要中提取内容,如下所示 <item> <title>BPS: Kartu Bansos Bantu Turunkan Angka Gini Ratio</title> <media:content url="/image.jpg" expression="full" type="image/jpeg"/> </item> BPS:Kartu-Bansos-Bantu-Turunkan-Angka-Gini比率

我想从新闻站点RSS提要中提取内容,如下所示

<item>
<title>BPS: Kartu Bansos Bantu Turunkan Angka Gini Ratio</title>
<media:content url="/image.jpg" expression="full" type="image/jpeg"/>  </item>

BPS:Kartu-Bansos-Bantu-Turunkan-Angka-Gini比率
但是在使用类似xpath的item.xpath('//media:content')

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
xpath中的文件“/usr/local/lib/python2.7/site packages/parsel/selector.py”,第183行
重新发送(ValueError,ValueError(msg),sys.exc_info()[2])
xpath中的文件“/usr/local/lib/python2.7/site packages/parsel/selector.py”,第179行
智能字符串=自身。_lxml_智能字符串)
lxml.etree.\u Element.xpath(src/lxml/lxml.etree.c:57923)中的第1587行文件“src/lxml/lxml.etree.pyx”
文件“src/lxml/xpath.pxi”,第307行,位于lxml.etree.XPathElementEvaluator.调用(src/lxml/lxml.etree.c:167084)
文件“src/lxml/xpath.pxi”,第227行,在lxml.etree.\u xpatheevaluorbase.\u handle\u result(src/lxml/lxml.etree.c:166043)中
ValueError:XPath错误://媒体:内容中未定义命名空间前缀

有人知道我该怎么做吗?谢谢:)

您需要通过首先调用选择器上的来告诉xpath将
媒体前缀映射到哪个命名空间,例如:

selector.register_namespace('media', 'http://the.namespace.of/media')
或者,如果您只想使用本地名称,则可以使用:

 item.xpath("//*[local-name()='content']")

您需要通过首先调用选择器上的来告诉xpath将
媒体
前缀映射到哪个命名空间,例如:

selector.register_namespace('media', 'http://the.namespace.of/media')
或者,如果您只想使用本地名称,则可以使用:

 item.xpath("//*[local-name()='content']")

Scrapy选择器的
.xpath()
不接受
namespaces
参数,就像
lxml
一样(但在这一点上存在错误)。必须事先调用选择器。@paultrmbrth thx,我不知道这不是lxml的xpath(),应该仔细查看堆栈跟踪。。。感谢您的参考,我已经更正了我的回答。xpath()
不接受
名称空间
参数,就像
lxml
一样(但在这一点上没有)。必须事先调用选择器。@paultrmbrth thx,我不知道这不是lxml的xpath(),应该仔细查看堆栈跟踪。。。谢谢你的推荐,我已经更正了我的答案