2013-10-06 3 views
1

Я разбираю XML-документ с помощью Scrapy и испытываю проблемы с XPath.Получение атрибутов XPath с помощью Scrapy

Мой XML выглядит следующим образом:

<sdn:screen> 
<foaf:Image rdf:about="http://search.shinrokuden.irides.tohoku.ac.jp/shinrokuden/archive/screen/07f9d1a0-5ef4-11e2-91ca-000c2923bf22.jpg"/> 
</sdn:screen> 


Мне нужен URL следующий rdf:about=. Я использую функцию scrap remove_namespaces(), так что мне не нужно использовать пространства имен в моем XPath. Я попытался следующие XPaths но все они возвращаются []:

xxs.select('//record/metadata/RDF/Resource/screen/Image/about').extract() 

xxs.select('//record/metadata/RDF/Resource/screen/Image/@about').extract() 

xxs.select('//record/metadata/RDF/Resource/screen/Image[@about]').extract() 

xxs.select('//record/metadata/RDF/Resource/screen[@about]').extract() 

xxs.select('//record/metadata/RDF/Resource/screen/@about').extract() 

И много других подобных изменений.

Я знаю, что путь до '//record/metadata/RDF/Resource/screen/Image' верен, потому что он выводит данные, но, как я уже сказал, те, кто пытается получить доступ к разделу «rdf: about», все придумали []. Я действительно не думаю, что пространства имен являются проблемой, так как я удалил пространства имен, но снова я мог ошибаться.

+1

Где объявляются эти пространства имен? – Birei

+0

вы можете избавиться от бизнеса 'record/metadata/RDF/Resource' и попытаться как можно больше упростить задачу, также вы можете показать создание' xxs' –

+0

Мне кажется, что. .remove_namespaces () 'не удаляет пространства имен для атрибутов элемента. 'self._root.iter (*)' (https://github.com/scrapy/scrapy/blob/master/scrapy/selector/lxmlsel.py#L76) использует только элементы, а не атрибуты. Я тестировал https://itunes.apple.com/fr/rss/topaudiobooks/limit=10/xml и должен был называть 'xxs.register_namespace (« im »,« http://itunes.apple.com/rss »)) 'для доступа к' xxs.select ('// entry // @ im: assetType') ' –

ответ

2

Если вы все еще ищете XPath к атрибуту:

//record/metadata/RDF/Resource/screen/Image/attribute::rdf:about 

Я не проверял, но что-то подобное будет тянуть атрибут

вы можете прочитать больше о XPath в http://www.w3schools.com/xpath/xpath_axes.asp

Смежные вопросы