scrapy爬取数据时爬取到相同的数据

问题

在爬取一个网站的时候,爬取数据时爬取到一堆重复的数据,而使用resquest模块却不会有重复的数据出现

原因

  1. request模块是一个单线程的模块
  2. scrapy 是一个异步的爬虫框架,在爬虫程序中在一个大分类中创建的字典,在yeild传值的时候,传递的是字典的引用,而经过多个for 循环,会将里面的值更改掉,然后直接保存,从而出现很多数据是重复的现象
  3. 直接传值(传递的是引用),会使后面的数据影响前一次使用的数据

解决这个问题的方法

  1. 使用深拷贝,在使用yeild传值的时候传递真正的值,而不传递其引用
  2. 及使用copy模块deepcopy

我自己做实例的时候出现错误的程序

import scrapy
from f003books.items import F003BooksItem
from pprint import pprint

class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['book.kongfz.com']
    start_urls = ['http://book.kongfz.com/Cxianzhuang/']

    def parse(self, response):
        """1. 分组,获取分类"""
        family_list = response.xpath(
            "//div[@class='filter-item p-b15']/a[@class='three-level-polymerization']")
        # items = {}
        for family in family_list:
            items = F003BooksItem()
            items["family"] = family.xpath("./span[1]/text()").extract_first()
            items["family_url"] = family.xpath("./@href").extract_first()
            yield scrapy.Request(
                items["family_url"],
                meta={
   "items": items},
                callback=self.books_parse
            )

    def books_parse(self, response):
        """ 2. 获取图书页的信息"""
        # 图书分组
        items = deepcopy(response.meta
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值