Web scraping 使用Scrapy刮取数据时数据重复

Web scraping 使用Scrapy刮取数据时数据重复,web-scraping,scrapy,duplicates,Web Scraping,Scrapy,Duplicates,python 我正在使用scrapy从一个网站上刮取数据,在那里我想刮取图形卡的标题、价格以及它们是否有库存。问题是我的代码循环了两次,我得到的不是10产品,而是20 import scrapy class ThespiderSpider(scrapy.Spider): name = 'Thespider' start_urls = ['https://www.czone.com.pk/graphic-cards-pakistan-ppt.154.aspx?page=2

python

我正在使用scrapy从一个网站上刮取数据,在那里我想刮取图形卡的标题、价格以及它们是否有库存。问题是我的代码循环了两次,我得到的不是10产品,而是20

import scrapy
    
class ThespiderSpider(scrapy.Spider):
    name = 'Thespider'
    start_urls = ['https://www.czone.com.pk/graphic-cards-pakistan-ppt.154.aspx?page=2']
    
    def parse(self, response):
        data = {}
        cards = response.css('div.row')
        for card in cards:
            for c in card.css('div.product'):
                data['Title'] =  c.css('h4 a::text').getall()
                data['Price'] =  c.css('div.price span::text').getall()
                data['Stock'] = c.css('div.product-stock span.product-data::text').getall()
                yield data

你正在做一个嵌套的for循环,而这个循环是不必要的

CSS选择器
response.CSS('div.product')

代码示例 补充资料
  • 使用
    get()
    而不是
    getall()
    。您得到的输出是一个列表,您可能需要
    get()
    提供的字符串
  • 如果您考虑多个页面,那么一个条目字典可能比生成一个字典要好。总是会有你需要修改的东西,而条目字典给了你更大的灵活性
def parse(self, response):
    data = {}
    cards = response.css('div.product')
    for card in cards:
        data['Title'] =  card.css('h4 a::text').getall()
        data['Price'] =  card.css('div.price span::text').getall()
        data['Stock'] = card.css('div.product-stock span.product-data::text').getall()
        yield data