Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 for XML页面_Python_Xml_Web Scraping_Scrapy - Fatal编程技术网

Python 使用Scrapy for XML页面

Python 使用Scrapy for XML页面,python,xml,web-scraping,scrapy,Python,Xml,Web Scraping,Scrapy,我试图从一个API中刮取多个页面来练习和开发我的XML刮取。出现的一个问题是,当我试图刮取一个格式如下的文档:并将其存储为XML时,它无法做到这一点 因此,在CMD中,它获取URL,并在我的计算机上创建XML文件,但其中没有任何内容 我该如何修复它以反映整个文档甚至部分文档 我把代码放在下面: from scrapy.spider import BaseSpider from scrapy.selector import XmlXPathSelector from doitapi.items i

我试图从一个API中刮取多个页面来练习和开发我的XML刮取。出现的一个问题是,当我试图刮取一个格式如下的文档:并将其存储为XML时,它无法做到这一点

因此,在CMD中,它获取URL,并在我的计算机上创建XML文件,但其中没有任何内容

我该如何修复它以反映整个文档甚至部分文档

我把代码放在下面:

from scrapy.spider import BaseSpider
from scrapy.selector import XmlXPathSelector
from doitapi.items import DoIt
import random

class MySpider(BaseSpider):
    name = "craig"
    allowed_domains = ["do-it.org.uk"]
    start_urls = []
    number = []
    for count in range(100):
        number.append(random.randint(2000000,2500000))


    for i in number:
        start_urls.append("http://www.do-it.org.uk/syndication/opportunities/%d?apiKey=XXXXX-XXXX-XXX-XXX-XXXXX" %i)



       def parse(self, response):
    xxs = XmlXPathSelector(response)
    titles = xxs.register_namespace("d", "http://www.do-it.org.uk/volunteering-opportunity")
    items = []
    for titles in titles:
        item = DoIt()
        item ["url"] = response.url
        item ["name"] = titles.select("//d:title").extract()
        item ["description"] = titles.select("//d:description").extract()
        item ["username"] = titles.select("//d:info-provider/name").extract()
        item ["location"] = titles.select("//d:info-provider/address").extract()
        items.append(item)
    return items

您的XML文件正在使用命名空间“”,因此要选择
标题
名称
等。您有两个选择:

  • 使用
    xxs。删除\u名称空间()
    一次,然后使用
    。选择(“./title”)
    。选择(“./description”)
  • 或者用前缀“doit”注册一次名称空间http://www.do-it.org.uk/volunteering-opportunity”,然后使用
    。选择(“./doit:title”)
    。选择(“./doit:description”)

有关XML名称空间的更多详细信息,请参阅和

谢谢!很抱歉,如果我看起来像个十足的傻瓜,这是我的第一个python项目,也是我第一次从XML中获取信息。回家后我会试试这个。嘿,不要感到抱歉:)XML解析和名称空间并不简单,我们都在这里学习。很高兴您将Scrapy作为您的第一个Python项目进行了尝试。我尝试了使用您的代码和文档中的代码,但仍然没有成功,至少我现在遇到了错误!哈哈,错误是“蜘蛛错误处理”异常。TypeError:“NoneType”对象不可编辑也是另一个错误,它提供了整个堆栈跟踪,并且它还将有助于有一个示例XML文档,而不仅仅是屏幕截图。您可以使用gist.github.com或Pastebin