最近打算学习 scrapy_splash 来爬取 js 加载的动态网页
selenium 实在太慢了,不在迫不得已的情况下并不推荐使用
下面,直接开始吧
目标网站
JD 某商品
环境需求
已安装 docker 并能正常运行。( 使用 docker 我们可以直接使用别人安装好的 splash 环境,splash 官方也是使用的 docker )通过 docker 安装 splash 环境。( 安装在本地通过访问 127.0.0.1:8050 测试,远程则是 ip:8050 )docker run -p 8050:8050 scrapinghub/splash
3. 安装 scrapy_splash
步骤
与往常一样使用 scrapy 创建爬虫修改 settings 文件# splash 地址SPLASH_URL = 'http://192.168.0.100:8050'# 去重这里应该是可以修改的,可以不使用 scrapy_splash 配套的,譬如 RedisDUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'# 这里不建议修改,建议使用原生HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'# 这个是按照官方配置的# scrapy 中间件是按照权重数字从小到大加载执行的# 不清楚 scrapy 内置顺序的情况下请勿修改SPIDER_MIDDLEWARES = {# 'scrapy_test.middlewares.ScrapyTestSpiderMiddleware': 543,'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,}DOWNLOADER_MIDDLEWARES = {# 'scrapy_test.middlewares.ScrapyTestDownloaderMiddleware': 543,'scrapy_splash.SplashCookiesMiddleware': 723,'scrapy_splash.SplashMiddleware': 725,'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}
3. 修改 spider 文件
from scrapy_splash import SplashRequestclass TestSpider(scrapy.Spider):name = 'test'# allowed_domains = ['']url = '/100000177760.html'# start requestdef start_requests(self):# yield SplashRequest(self.url, callback=self.parse, endpoint='execute', args={'lua_source': script})yield SplashRequest(self.url, callback=self.parse)
效果展示
文章解释
代码中含较多注释是因为本人先前在调试,调试成功后并没有去删除其 若想使用我未删除的注释进行调试,请注意 lua 语言中 '--' 代表注释行推荐阅读
霾大:scrapy_splash 设置随机请求头代码传送门
LZC6244/scrapy_splash_test原创文章,转载请保留或注明出处!