如何解决使用Scrapy抓取数据时重复数据
python
我正在使用scrapy来从网站上刮取数据,我要在其中刮擦图形卡的标题,价格以及它们是否有库存。问题是我的代码循环了两次,而不是得到 20 的产品,而不是 10 。
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')
可以捕获每张卡
代码示例
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
其他信息
- 使用
get()
代替getall()
。您得到的输出是一个列表,您可能想要一个get()
给您的字符串。 - 如果您要考虑多个页面,那么使用项字典可能比产生字典更好。总是会有您需要更改的内容,而项字典可为您提供更大的灵活性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。