在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 什么是scrapy_splash?scrapy_splash是scrapy的一个组件
2. scrapy_splash的作用scrapy-splash能够模拟浏览器加载js,并返回js运行后的数据 3. scrapy_splash的环境安装3.1 使用splash的docker镜像
观察发现splash依赖环境略微复杂,所以我们可以直接使用splash的docker镜像 如果不使用docker镜像请参考splash官方文档 安装相应的依赖环境 3.1.1 安装并启动docker服务 3.1.2 获取splash的镜像
3.1.3 验证是否安装成功
访问 3.1.4 解决获取镜像超时:修改docker的镜像源
1.创建并编辑docker的配置文件
2.写入国内docker-cn.com的镜像地址配置后保存退出 { "registry-mirrors": ["https://registry.docker-cn.com"] } 3.重启电脑或docker服务后重新获取splash镜像 4.这时如果还慢,请使用手机热点(流量orz) 3.1.5 关闭splash服务
sudo docker ps -a sudo docker stop CONTAINER_ID sudo docker rm CONTAINER_ID 3.2 在python虚拟环境中安装scrapy-splash包
4. 在scrapy中使用splash
4.1 创建项目创建爬虫scrapy startproject test_splash cd test_splash scrapy genspider no_splash baidu.com scrapy genspider with_splash baidu.com 4.2 完善settings.py配置文件在 # 渲染服务的url SPLASH_URL = 'http://127.0.0.1:8050' # 下载器中间件 DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } # 去重过滤器 DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' # 使用Splash的Http缓存 HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage' # Obey robots.txt rules ROBOTSTXT_OBEY = False 4.3 不使用splash在 import scrapy class NoSplashSpider(scrapy.Spider): name = 'no_splash' allowed_domains = ['baidu.com'] start_urls = ['https://www.baidu.com/s?wd=13161933309'] def parse(self, response): with open('no_splash.html', 'w') as f: f.write(response.body.decode()) 4.4 使用splashimport scrapy from scrapy_splash import SplashRequest # 使用scrapy_splash包提供的request对象 class WithSplashSpider(scrapy.Spider): name = 'with_splash' allowed_domains = ['baidu.com'] start_urls = ['https://www.baidu.com/s?wd=13161933309'] def start_requests(self): yield SplashRequest(self.start_urls[0], callback=self.parse_splash, args={'wait': 10}, # 最大超时时间,单位:秒 endpoint='render.html') # 使用splash服务的固定参数 def parse_splash(self, response): with open('with_splash.html', 'w') as f: f.write(response.body.decode()) 4.5 分别运行俩个爬虫,并观察现象4.5.1 分别运行俩个爬虫 scrapy crawl no_splash scrapy crawl with_splash 4.5.2 观察获取的俩个html文件 不使用splash 使用splash 4.6 结论
5. 了解更多
6. 小结1.scrapy_splash组件的作用
2.scrapy_splash组件的使用
3.scrapy_splash的特定配置 SPLASH_URL = 'http://127.0.0.1:8050' DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage' 到此这篇关于爬虫进阶-JS自动渲染之Scrapy_splash组件的使用的文章就介绍到这了,更多相关js Scrapy_splash组件使用内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论