python爬蟲之Splash使用初體驗


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)

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM