我正在尝试使用scrapy从多个网页中提取电话标题(以及其他数据)。我正在尝试使用已定义的功能。 “解析”功能应该提取所有页面链接,如果我让其将结果转换为CSV格式,它将正确执行。但是,当我尝试设置第二个“ parse_pages”时,似乎代码甚至都不会尝试处理,并且我无法获得仅每个页面标题的CSV输出
注意:我认为下面的函数缩进是错误的
import scrapy
from scrapy.http import Request
url = 'https://www.gsmarena.com/'
class PhonelinksSpider(scrapy.Spider):
name = 'phonelinks'
allowed_domains = ['www.gsmarena.com/results.php3?']
start_urls = ['https://www.gsmarena.com/results.php3?']
def parse(self, response):
links = response.xpath('//div[@class="makers"]/ul/li/a/@href').extract()
for link in links:
location = url+link
yield response.follow(url = location,callback = self.parse_pages)
def parse_pages(self, response):
phones = response.xpath('//h1[contains(@class,"specs-phone-name-title")]/text()').extract_first().strip()
for title in phones:
phone_list = {'phone':title}
yield phone_list
答案 0 :(得分:1)
这里
phones = response.xpath('//h1[contains(@class,"specs-phone-name-title")]/text()').extract_first().strip()
extract_first()
返回string
或None
,这就是为什么您可以在下一行进行迭代的原因。
def parse_pages(self, response):
title = response.xpath('//h1[contains(@class,"specs-phone-name-title")]/text()').extract_first().strip()
yield {'phone':title}