Splash是什么:
Splash是一個Javascript渲染服務。它是一個實現了HTTP API的輕量級瀏覽器,Splash是用Python實現的,同時使用Twisted和QT。Twisted(QT)用來讓服務具有異步處理能力,以發揮webkit的並發能力。
為什么要有Splash:
為了更加有效的制作網頁爬蟲,由於目前很多的網頁通過javascript模式進行交互,簡單的爬取網頁模式無法勝任javascript頁面的生成和ajax網頁的爬取,同時通過分析連接請求的方式來落實局部連接數據請求,相對比較復雜,尤其是對帶有特定時間戳算法的頁面,分析難度較大,效率不高。而通過調用瀏覽器模擬頁面動作模式,需要使用瀏覽器,無法實現異步和大規模爬取需求。鑒於上述理由Splash也就有了用武之地。一個頁面渲染服務器,返回渲染后的頁面,便於爬取,便於規模應用。
安裝條件:
操作系統要求:
Docker for Windows requires Windows 10 Pro or Enterprise version 10586, or Windows server 2016 RTM to run
安裝:
首先點擊下面鏈接,從docker官網上下載windows下的docker進行安裝,不過請注意系統要求是**windows1064位 pro及以上版本或者教育版
官網下載:https://store.docker.com/editions/community/docker-ce-desktop-windows
安裝包下載完成后以管理員身份運行。
查看信息:
#docker info
#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
Centos7安裝:
准備工作
刪除原來的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
使用
1、配置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)