Python 使用Scrapy for XML页面
我试图从一个API中刮取多个页面来练习和开发我的XML刮取。出现的一个问题是,当我试图刮取一个格式如下的文档:并将其存储为XML时,它无法做到这一点 因此,在CMD中,它获取URL,并在我的计算机上创建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
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