Python中使用CrawlSpider+Scrapy-Splash爬取美的商城商品信息,部分商品页缺失如何解决?
<div class=“paginator”><span class=“page-start”><</span><span class=“page-this”>1</span><a href="#nolink" pagetag=“go” pageid=“2”>2</a><a href="#nolink" class=“page-next” pagetag=“go” pageid=“2”>></a></div> 由于商品列表的下一页没有相对链接进去,所以采用 scrapy-splash,感觉并没有实现翻页功能,因为后面几页商品列表中的商品详情页并没有爬取到!
Python中使用CrawlSpider+Scrapy-Splash爬取美的商城商品信息,部分商品页缺失如何解决?
1 回复
我遇到类似问题,通常是因为Splash渲染时机不对。试试在CrawlSpider规则里调整wait参数,并添加timeout控制:
import scrapy
from scrapy_splash import SplashRequest
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MideaSpider(CrawlSpider):
name = 'midea'
allowed_domains = ['midea.com']
start_urls = ['https://mall.midea.com']
rules = (
Rule(LinkExtractor(allow=r'/product/\d+'),
callback='parse_product',
process_request='splash_request'),
)
def splash_request(self, request):
return SplashRequest(
request.url,
args={
'wait': 2.5, # 关键:等待页面完全加载
'timeout': 90,
'resource_timeout': 10,
'images': 0 # 禁用图片加速
},
endpoint='render.html',
)
def parse_product(self, response):
# 检查页面是否完整加载
if not response.css('.product-detail'):
self.logger.warning(f'页面不完整: {response.url}')
# 可考虑重试或记录缺失URL
yield None
else:
yield {
'title': response.css('.product-title::text').get(),
'price': response.css('.product-price::text').get(),
'url': response.url
}
如果还有缺失,可能是动态加载内容。在Splash参数里加'wait': 0.5, 'js_source': 'window.scrollTo(0, document.body.scrollHeight)'模拟滚动。另外检查robots.txt和频率限制。
总结:调wait参数和超时设置。

