在使用python的scrapy框架进行爬取外贸网站ebay上某类别产品销量时,我遇到了这个问题,每次爬取数据十个里面总有两三个会遗漏,有时候甚至连着四五条数据被遗漏。
这个问题一直困扰了我好几天。一开始以为是并发开的太多,程序运行太快,或者是被网站屏蔽等。其实都不是。也考虑到了网络延迟等原因,调整了速度和等待时间,反复的调试了好多次都没用,总会有那么几条数据会被遗漏。
后来我在尝试了使用selenium模拟动态页面请求时,终于找到了一个比较完美的方案。但是缺点是数据抓取速度没那么快了。但这其实影响不大,反正我们睡觉的时候也可以让机器工作嘛。
我们的案例是爬取关键词iPhone x case的商品前50条数据(eBay显示50,其实实际是60条),这里没有做翻页的深度。
这里注意无销量的产品是抓取不到销售数据的,scrapy会报错然后跳到下一条。所以我们把无销量的产品sold=“0 sold”传给pipelines就可以了
下面我把代码贴出来:
# -*- coding: utf-8 -*-
import scrapy,time
from scrapy.selector import Selector
from scrapy.http import Request
from ..items import ebItem
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
count = 0
count2 = 0
class Ebt2Spider(scrapy.Spider):
name = 'ebt2'
allowed_domains =