最近打算学习 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 配套的,譬如 Redis
DUPEFILTER_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 SplashRequest
class TestSpider(scrapy.Spider):
name = 'test'
# allowed_domains = ['www.baidu.com']
url = 'https://item.jd.com/100000177760.html'
# start request
def start_requests(self):
# yield SplashRequest(self.url, callback=self.parse, endpoint='execute', args={'lua_source': script})
yield SplashRequest(self.url, callback=self.parse)
效果展示
![f9bca9fccc6cb72334732103b7800563.png](https://img-blog.csdnimg.cn/img_convert/f9bca9fccc6cb72334732103b7800563.png)
![ef779b345719b029b9850fb23f6b30c2.png](https://img-blog.csdnimg.cn/img_convert/ef779b345719b029b9850fb23f6b30c2.png)
![7c1cacc4852ac99246992835412acbd0.png](https://img-blog.csdnimg.cn/img_convert/7c1cacc4852ac99246992835412acbd0.png)
![1ebab0ce5c855613e25561b1ac555e47.png](https://img-blog.csdnimg.cn/img_convert/1ebab0ce5c855613e25561b1ac555e47.png)
![7b5623a6b8546dacba3d9f12232c14e4.png](https://img-blog.csdnimg.cn/img_convert/7b5623a6b8546dacba3d9f12232c14e4.png)
文章解释
- 代码中含较多注释是因为本人先前在调试,调试成功后并没有去删除其
- 若想使用我未删除的注释进行调试,请注意 lua 语言中 '--' 代表注释行
推荐阅读
- 霾大:scrapy_splash 设置随机请求头
代码传送门
LZC6244/scrapy_splash_testgithub.com![6de5bb81be7f884cc7c7895f3b8a3d2f.png](https://img-blog.csdnimg.cn/img_convert/6de5bb81be7f884cc7c7895f3b8a3d2f.png)
原创文章,转载请保留或注明出处!