我正在抓取一个对产品图像使用延迟加载的网站。
出于这个原因,我包括在内scrapy-splash
,以便也可以使用 splash 呈现 javascript 我可以提供一个wait
参数。以前我有一个虽然这是因为原始scrapy.Request
返回占位符图像而不是原件的时间。
我也尝试过等待 29.0 秒的参数,但我的爬虫仍然几乎没有得到 10 个项目(根据计算它应该带来 280 个项目)。我有一个项目管道,它检查项目中的图像是否为空,所以 i raise DropItem
。
我不确定,但我也注意到这不仅仅是wait
问题。当我向下滚动时,看起来图像被加载了。
我正在寻找的是一种在我的请求中自动滚动到底部行为的方法。
这是我的代码 蜘蛛
def parse(self, response):
categories = response.css('div.navigation-top-links a.uppercase::attr(href)').extract()
for category in categories:
link = urlparse.urljoin(self.start_urls[0], category)
yield SplashRequest(link, callback=self.parse_products_listing, endpoint='render.html',
args={'wait': 0.5})
管道
class ScraperPipeline(object):
def process_item(self, item, spider):
if not item['images']:
raise DropItem
return item
设置
IMAGES_STORE = '/scraper/images'
SPLASH_URL = 'http://172.22.0.2:8050'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
ITEM_PIPELINES = {
'scraper.pipelines.ScraperPipeline': 300,
'scrapy.pipelines.images.ImagesPipeline': 1
}
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddleware.useragent.UserAgentMiddleware': None,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
# 'custom_middlewares.middleware.ProxyMiddleware': 210,
}