Scrapy利用Splash抓取动态页面
2018-01-22 09:56
483 查看
之前的例子,我爬取的都是些静态页面中的信息,爬取容易。但是目前大多数网站都是动态的,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难。
动态网页一般两种思路 ,一是找到api接口伪装请求直接请求数据,另一种是没有办法模拟的时候需要渲染环境。
这里我使用了第二种方法
Splash是Scrapy官方推荐的JavaScript渲染引擎,它是使用Webkit开发的轻量级无界面浏览器,提供基于HTTP接口的JavaScript渲染服务,支持以下功能:
为用户返回经过渲染的HTML页面或页面截图
并发渲染多个页面
关闭图片加载,加速渲染
在页面中执行用户自定义的JavaScript代码
执行用户自定义的渲染脚本(lua),功能类似于PhantomJS
如何使用Splash:
splash使用的是Splash HTTP API,所以需要一个Splash Instance,一般采用docker运行splash,所以需要安装docker
拉取镜像
在本机的8050和8051端口开启Splash服务
安装scrapy-splash
配置splash服务(settings.py)
例子:
动态网页一般两种思路 ,一是找到api接口伪装请求直接请求数据,另一种是没有办法模拟的时候需要渲染环境。
这里我使用了第二种方法
Splash是Scrapy官方推荐的JavaScript渲染引擎,它是使用Webkit开发的轻量级无界面浏览器,提供基于HTTP接口的JavaScript渲染服务,支持以下功能:
为用户返回经过渲染的HTML页面或页面截图
并发渲染多个页面
关闭图片加载,加速渲染
在页面中执行用户自定义的JavaScript代码
执行用户自定义的渲染脚本(lua),功能类似于PhantomJS
如何使用Splash:
splash使用的是Splash HTTP API,所以需要一个Splash Instance,一般采用docker运行splash,所以需要安装docker
sudo apt-get install docker
拉取镜像
sudo docker pull scrapinghub/splash
在本机的8050和8051端口开启Splash服务
docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash
安装scrapy-splash
pip install scrapy-splash
配置splash服务(settings.py)
# Splash服务器地址 SPLASH_URL = 'http://localhost:8050' DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } # 设置去重过滤器 DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' # 用来支持cache_args SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, } HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
例子:
for index, id in enumerate(ids): req = SplashRequest(self.detail_url + str(id)) req.callback = self.parse_detail req.endpoint = 'render.html' req.meta['tel'] = tel req.meta['name'] = name req.meta['id'] = id req.args = {'wai 4000 t': 0.5} yield req
相关文章推荐
- 利用scrapy-splash爬取JS生成的动态页面
- Scrapy爬虫中使用Splash抓取动态JS页面
- 利用scrapy-splash爬取JS生成的动态页面
- scrapy-splash抓取动态数据例子一
- scrapy-splash抓取动态数据例子六
- scrapy-splash抓取动态数据例子四
- scrapy-splash爬取JS生成的动态页面
- scrapy-splash抓取动态数据例子八
- zg手册 之 scrapy 开发(4)-- javascript 动态页面的抓取
- scrapy-splash抓取动态数据例子二
- scrapy-splash抓取动态数据例子十
- scrapy抓取动态页面的事项
- scrapy-splash抓取动态数据例子十一
- scrapy-splash抓取动态数据例子十五
- scrapy-splash抓取动态数据例子九
- scrapy-splash抓取动态数据例子十二
- scrapy-splash抓取动态数据例子十三
- scrapy抓取动态页面方法
- scrapy-splash抓取动态数据例子七
- Scrapy抓取Ajax动态页面