Python 使用Scrapy刮取arXiv xml数据
我正试图从arXiv的页面获取信息,但无法从以下内容中选择“项目”: item对象非常简单,如果我可以提取它Python 使用Scrapy刮取arXiv xml数据,python,xml,screen-scraping,scrapy,Python,Xml,Screen Scraping,Scrapy,我正试图从arXiv的页面获取信息,但无法从以下内容中选择“项目”: 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="Litera
<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>
胡说八道。。。废话
http://arxiv.org/abs/1112.5754
废话,废话
脚本运行得很好,它只是文件=[]
,因此爬行器没有收集项目
。它可能必须使用名称空间
它可能必须使用名称空间
是的
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'>,
...
$scrapy shellhttp://export.arxiv.org/rss/hep-th/recent
[1]中:xxs.register_名称空间('g','http://purl.org/rss/1.0/')
在[2]中:xxs.名称空间
Out[2]:{'g':'http://purl.org/rss/1.0/'}
在[3]中:xxs.select('//item')
输出[3]:[]
在[4]中:xxs.select('//g:item')
出[4]:
[,
,
...
我想你应该在你的脏壳里试一下,做个实验。
1.刮壳“
您是否收到任何错误消息?编译错误?运行时错误?它会运行…如果“papers”变量只是空数组[]尝试xxs.namespaces时出错,我使用的是scrapy 0.14。其他步骤与示例arxiv example.namespaces属性一起工作。名称空间属性仅适用于lxml后端。如果您使用的是libxml2,则不会出现此错误。lxml后端的另一个重要问题是,在进行任何选择调用之前,必须先注册名称空间。afterr在第一次选择时,名称空间集将被冻结,任何对注册\u名称空间的进一步调用都将被丢弃。。。
$ 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'>,
...