2016-08-19 2 views
0

私はScrapy:XPathのエラー://メディアに無効な表現:コンテンツ

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

以下のような項目でニュースサイトのRSSフィードからコンテンツを抽出したいが、メディアのようなタグで情報を解析するときにエラーが発生: XPathのようなitem.xpath使用してコンテンツ( '//メディア:コンテンツ')

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.7/site-packages/parsel/selector.py", line 183, in xpath 
    six.reraise(ValueError, ValueError(msg), sys.exc_info()[2]) 
    File "/usr/local/lib/python2.7/site-packages/parsel/selector.py", line 179, in xpath 
    smart_strings=self._lxml_smart_strings) 
    File "src/lxml/lxml.etree.pyx", line 1587, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:57923) 
    File "src/lxml/xpath.pxi", line 307, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:167084) 
    File "src/lxml/xpath.pxi", line 227, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:166043) 
ValueError: XPath error: Undefined namespace prefix in //media:content 

は誰も私が何をすべきか知っていますか?あなたはmedia接頭辞を名前空間XPathを伝える必要があり感謝:)

答えて

4

は、例えば、第1のセレクタにregister_namespace(prefix, namespace)を呼び出すことによってにマップされます。

selector.register_namespace('media', 'http://the.namespace.of/media') 

またはあなただけのローカル名を使用したい場合は、使用することができます。

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

Scrapyセレクタの '.xpath()' '' lxml'がないようnamespaces'引数を受け付けません(ただし、あります[オープンPR](https://github.com/scrapy/parsel/プル/ 45)。セレクタの[.register_namespace(prefix、namespace) '](https://parsel.readthedocs.io/en/latest/usage.html#parsel.selector.Selector.register_namespace)を事前に呼び出さなければなりません。 –

+0

@paultrmbrth thx、私はこれがlxmlのxpath()ではないことを認識していませんでした。スタックトレースを近づけてみたはずです...参考に感謝します。私の答えを修正しました – mata

+0

ありがとう@mata、 – NGloom

関連する問題