aaaabbbbbccccc 2023-07-05 21:48 采纳率: 0%
浏览 4

pycharm的scrapy包爬虫时重复获取同一条数据

请问这种问题该怎么解决啊?

pycharm的scrapy包爬虫时重复获取同一条数据,
用yield传输之后
csv文件里除了第一行为列名以外,所有行的内容都是一样的,重复该网页目标区的某一条消息(多次运行生成的不同),比该网页目标区的此条信息总量还多

运行语句为:

scrapy crawl eshouse -o eshouse.csv

以下为我的主代码与补充代码

import scrapy
from scrapy import Selector,Request
from zhihuSpider.items import eshouseItem 
 #Item的class放在下一个代码块


class EshousespiderSpider(scrapy.Spider):
    name = "eshouse"
    allowed_domains = ["cd.esf.fang.com"]
    start_urls = ["https://cd.esf.fang.com/"]

    def parse(self, response):
        sel=Selector(response)
        list_items=sel.css('body > div.main1200.clearfix > div.main945.floatl > div.shop_list.shop_list_4 > dl')
        for list_item in list_items:
            item=eshouseItem()
            a=sel.css('dl > dd:nth-child(2) > h4 > a > span::text').extract_first()
            item['title']=a.replace('\n\t\t\t\t\t\t\t\t\t\t\t\t','')
            item['price']=sel.css('dl > dd.price_right > span.red > b::text').extract_first()
            item['priceper']=sel.css('dl > dd.price_right > span:nth-child(2)::text').extract_first()
            item['jiegou']=sel.css('dl > dd:nth-child(2) > p.tel_shop >a::text').extract_first()
            item['transfer'] = sel.css('dl > dd:nth-child(2) > p.clearfix.label > span::text').extract_first()
            item['positive'] = sel.css('dl > dd:nth-child(2) > p.clearfix.label > span::text').extract_first()
            item["url"] = list_item.css("dl > dd:nth-child(2) > h4 > a::attr(href)").extract_first()
            print('\n\n\n\n\n\n\n\n\n\n',item['title'])
            yield item


class eshouseItem(scrapy.Item):
    title=scrapy.Field()
    price=scrapy.Field()
    priceper=scrapy.Field()
    jiegou=scrapy.Field()
    transfer=scrapy.Field()
    positive=scrapy.Field()
    url=scrapy.Field()

```

  • 写回答

2条回答 默认 最新

  • leoton 2023-07-06 14:32
    关注

    在使用Scrapy框架进行爬虫时,重复获取同一条数据通常是由于爬虫逻辑或配置问题引起的。以下是一些可能导致重复获取数据的常见原因和解决方法:

    • 爬虫逻辑问题:检查您的爬虫代码,确保您的爬虫逻辑正确处理了重复数据的情况。您可以使用yield语句返回爬取的数据,并在parse方法中使用Request对象设置回调函数来处理下一页的请求。
    • 去重过滤器配置:Scrapy提供了去重过滤器来防止重复爬取相同的URL。确保您正确配置了去重过滤器,以避免重复获取相同的数据。在settings.py文件中,确保以下配置项正确设置:
    DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'
    
    • 数据库或存储方式问题:如果您将爬取的数据存储到数据库或其他存储方式中,确保您的存储逻辑正确处理了重复数据的情况。您可以在存储之前检查数据是否已存在,并根据需要进行更新或忽略。
    • 请求参数问题:如果您的请求参数不正确或不完整,可能会导致重复获取相同的数据。确保您的请求参数正确设置,并且每个请求都具有唯一的标识符,以便服务器正确响应。
    • 日志调试:使用Scrapy的日志功能进行调试,查看爬虫运行时的日志输出,以确定重复获取数据的具体原因。您可以在settings.py文件中设置日志级别,以便更详细地查看日志信息。

    通过检查上述问题,并根据具体情况进行调试和修改,您应该能够解决重复获取同一条数据的问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月5日

悬赏问题

  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下