Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具备异步处理能力,以发挥webkit的并发能力。javascript
为了更加有效的制做网页爬虫,因为目前不少的网页经过javascript模式进行交互,简单的爬取网页模式没法胜任javascript页面的生成和ajax网页的爬取,同时经过分析链接请求的方式来落实局部链接数据请求,相对比较复杂,尤为是对带有特定时间戳算法的页面,分析难度较大,效率不高。而经过调用浏览器模拟页面动做模式,须要使用浏览器,没法实现异步和大规模爬取需求。鉴于上述理由Splash也就有了用武之地。一个页面渲染服务器,返回渲染后的页面,便于爬取,便于规模应用。html
安装条件:java
Docker for Windows requires Windows 10 Pro or Enterprise version 10586, or Windows server 2016 RTM to runpython
首先点击下面连接,从docker官网上下载windows下的docker进行安装,不过请注意系统要求是**windows1064位 pro及以上版本或者教育版 linux
官网下载:https://store.docker.com/editions/community/docker-ce-desktop-windowsweb
安装包下载完成后以管理员身份运行。ajax
查看信息:算法
#docker infodocker
#docker version网页爬虫
查看启动的容器
在docker中下载安装Splash镜像,并安装
#docker pull scrapinghub/splash
启动splash服务
#启动splash服务,并经过http,https,telnet提供服务 #一般通常使用http模式 ,能够只启动一个8050就好 #Splash 将运行在 0.0.0.0 at ports 8050 (http), 8051 (https) and 5023 (telnet). docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 scrapinghub/splash
参考连接:https://www.jianshu.com/p/4052926bc12c
删除原来的docker包,通常状况下不用,保险起见,最好按流程走一下
$ sudo yum -y remove docker docker-common container-selinux
删除docker的selinux 同上
$ sudo yum -y remove docker-selinux
使用yum 安装yum-utils
$ sudo yum install -y yum-utils
增长docker源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
查看docker源是否可用
$ sudo yum-config-manager --enable docker-ce-edge
enable 为True就行
建立缓存
$ sudo yum makecache fast
使用yum安装
docker如今分为两个版本 EE(企业版) CE(社区版),这里咱们选择CE版.
$ sudo yum install docker-ce
启动docker
$ sudo systemctl start docker
启动一个helloword
$ sudo docker run hello-world
这条命令会下载一个测试镜像,并启动一个容器,输出hello world 并退出,若是正常说明docker安装成功.
参考地址:https://www.cnblogs.com/colder219/p/6679255.html
一、配置splash服务(如下操做所有在settings.py):
1)添加splash服务器地址:
SPLASH_URL = 'http://localhost:8050'
2)将splash middleware添加到DOWNLOADER_MIDDLEWARE中:
DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, }
3)Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, }
4)Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
5)a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
案例:
import scrapy from scrapy_splash import SplashRequest class TbtaobaoSpider(scrapy.Spider): name = "tbtaobao" allowed_domains = ["www.taobao.com"] start_urls = ['https://s.taobao.com/search?q=坚果&s=880&sort=sale-desc'] def start_requests(self): for url in self.start_urls: # yield Request(url,dont_filter=True) yield SplashRequest(url, self.parse, args={'wait': 0.5}) def parse(self, response): print(response.text)