使用Scrapy从多个网页中抓取数据

时间:2019-11-11 20:27:47

标签: python scrapy

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

这里

phones = response.xpath('//h1[contains(@class,"specs-phone-name-title")]/text()').extract_first().strip()

extract_first()返回stringNone,这就是为什么您可以在下一行进行迭代的原因。

def parse_pages(self, response):
   title = response.xpath('//h1[contains(@class,"specs-phone-name-title")]/text()').extract_first().strip()
   yield {'phone':title}