我认为问题是当我尝试输入每个url拼写response.follow在循环中,但idk为什么,它将大约500个链接完美地传递到extract_xpath,但只返回ValueError不支持SelectorList
def spell_parse(self, response):
def extract_xpath(self, query):
return response.xpath(query).get(Default = '')
def parse(self, response):
def extract_xpath(self, query):
return response.xpath(query).get()
for spell in response.xpath('//tr'):
spell_def = spell.xpath('./td/a/@href')
yield response.follow(spell_def, callback = self.spell_parse)
yield {
'Spell name': spell.xpath('./td[1]//text()').extract(),
'School': spell.xpath('./td[2]//text()').extract(),
'Casting time': spell.xpath('./td[3]//text()').extract(),
'Range': spell.xpath('./td[4]//text()').extract(),
'Duration': spell.xpath('./td[5]//text()').extract(),
'Components': spell.xpath('./td[6]//text()').extract(),
'Definition': extract_xpath('/p[4]//text()').extract(),
'Levels': extract_xpath('/p[5]//text()').extract(),
}
1条答案
按热度按时间rkue9o1l1#
您需要像
spell_def = spell.xpath('./td/a/@href').get()
这样将get()
与spell_def = spell.xpath('./td/a/@href')
一起使用,否则您将无法将href
的实际值传递给以下函数。