Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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刮取arXiv xml数据_Python_Xml_Screen Scraping_Scrapy - Fatal编程技术网

Python 使用Scrapy刮取arXiv xml数据

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

我正试图从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="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.刮壳“

  • sel.remove_名称空间()

  • a=sel.xpath(“//title/text()”)


  • 您是否收到任何错误消息?编译错误?运行时错误?它会运行…如果“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'>,
    ...