我正在尝试从API中抓取多个页面来练习和开发我的XML报废。出现的一个问题是,当我尝试抓取格式如下的文档:http://i.imgur.com/zJqeYvG.png并将其存储为XML时,它无法执行此操作。
因此,在CMD中,它会获取在我的计算机上创建XML文件的URL,但其中没有任何内容。
如何修复它以回显整个文档甚至部分内容?
我把代码放在下面:
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
答案 0 :(得分:4)
您的XML文件使用名称空间“http://www.do-it.org.uk/volunteering-opportunity”,因此要选择title
,name
等,您有2个选择:
xxs.remove_namespaces()
一次,然后使用.select("./title")
,.select("./description")
等。xxs.register_namespace("doit", "http://www.do-it.org.uk/volunteering-opportunity")
,然后使用.select("./doit:title")
,.select("./doit:description")
等。有关XML命名空间的更多详细信息,请参阅this page in the FAQ和this page in the docs