очистка данных arXiv xml с помощью Scrapy - PullRequest
1 голос
/ 31 декабря 2011

Я пытаюсь получить информацию со страницы arXiv с помощью scrapy , но не могу выбрать "элементы" на их xml странице :

from scrapy.spider import BaseSpider
from scrapy.selector import XmlXPathSelector

class arXivSpider(BaseSpider):
    name = "arxiv"
    allowed_domains = ["arxiv.org"]
    start_urls = ["http://export.arxiv.org/rss/hep-th/recent"]

    def parse(self, response):
        xxs = XmlXPathSelector(response)
        papers = xxs.select('//item')
        print papers

Объект item довольно прост, если бы я мог извлечь его ...

<item rdf:about="http://arxiv.org/abs/1112.5754">
<title>blah blah ... blah</title>
<link>http://arxiv.org/abs/1112.5754</link>
<description rdf:parseType="Literal"><p>...</p></description>
<dc:creator>blah, blah blah</dc:creator>
</item>

Сценарий работает отлично, просто papers = [], поэтому паук не собирает item. Возможно, придется делать ж / пространства имен ...

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Возможно, придется делать с пространствами имен ...

Да, это так.

XmlXPathSelector может обрабатывать пространства имен, регистрируя их (примеры в документации ).В вашем случае:

$ scrapy shell http://export.arxiv.org/rss/hep-th/recent
In [1]: xxs.register_namespace('g', 'http://purl.org/rss/1.0/')

In [2]: xxs.namespaces
Out[2]: {'g': 'http://purl.org/rss/1.0/'}

In [3]: xxs.select('//item')
Out[3]: []

In [4]: xxs.select('//g:item')
Out[4]:
[<XmlXPathSelector xpath='//g:item' data=u'<item xmlns="http://purl.org/rss/1.0/" x'>,
 <XmlXPathSelector xpath='//g:item' data=u'<item xmlns="http://purl.org/rss/1.0/" x'>,
...
0 голосов
/ 17 января 2014

Я думаю, вы должны попробовать в своей скорлупе для экспериментов.1. скребковая раковина 'http://export.arxiv.org/rss/hep-th/recent'

sel.remove_namespaces ()

a = sel.xpath ('// title / text ()')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...