最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

爬蟲進階-JS自動渲染之Scrapy_splash組件的使用

 更新時間:2021年09月01日 11:48:30   作者:ZSYL  
Splash是一個Javascript渲染服務(wù)。它是一個實現(xiàn)了HTTP API的輕量級瀏覽器,Splash是用Python和Lua語言實現(xiàn)的,基于Twisted和QT等模塊構(gòu)建,今天重點給大家介紹js Scrapy_splash組件使用教程,一起看看吧

1. 什么是scrapy_splash?

scrapy_splashscrapy的一個組件

  • scrapy-splash加載js數(shù)據(jù)是基于Splash來實現(xiàn)的。
  • Splash是一個Javascript渲染服務(wù)。它是一個實現(xiàn)了HTTP API的輕量級瀏覽器,Splash是用Python和Lua語言實現(xiàn)的,基于Twisted和QT等模塊構(gòu)建。
  • 使用scrapy-splash最終拿到的response相當(dāng)于是在瀏覽器全部渲染完成以后的網(wǎng)頁源代碼。

splash官方文檔 https://splash.readthedocs.io/en/stable/

2. scrapy_splash的作用

scrapy-splash能夠模擬瀏覽器加載js,并返回js運行后的數(shù)據(jù)

3. scrapy_splash的環(huán)境安裝

3.1 使用splash的docker鏡像

splash的dockerfile https://github.com/scrapinghub/splash/blob/master/Dockerfile

觀察發(fā)現(xiàn)splash依賴環(huán)境略微復(fù)雜,所以我們可以直接使用splash的docker鏡像

如果不使用docker鏡像請參考splash官方文檔 安裝相應(yīng)的依賴環(huán)境

3.1.1 安裝并啟動docker服務(wù)

安裝參考 http://m.fzitv.net/article/213611.htm

3.1.2 獲取splash的鏡像

在正確安裝docker的基礎(chǔ)上pull取splash的鏡像

sudo docker pull scrapinghub/splash

3.1.3 驗證是否安裝成功

運行splash的docker服務(wù),并通過瀏覽器訪問8050端口驗證安裝是否成功

  • 前臺運行 sudo docker run -p 8050:8050 scrapinghub/splash
  • 后臺運行 sudo docker run -d -p 8050:8050 scrapinghub/splash

訪問http://127.0.0.1:8050 看到如下截圖內(nèi)容則表示成功

在這里插入圖片描述

3.1.4 解決獲取鏡像超時:修改docker的鏡像源

以ubuntu18.04為例

1.創(chuàng)建并編輯docker的配置文件

sudo vi /etc/docker/daemon.json

2.寫入國內(nèi)docker-cn.com的鏡像地址配置后保存退出

{ 
"registry-mirrors": ["https://registry.docker-cn.com"] 
}

3.重啟電腦或docker服務(wù)后重新獲取splash鏡像

4.這時如果還慢,請使用手機熱點(流量orz)

3.1.5 關(guān)閉splash服務(wù)

需要先關(guān)閉容器后,再刪除容器

sudo docker ps -a
sudo docker stop CONTAINER_ID
sudo docker rm CONTAINER_ID

3.2 在python虛擬環(huán)境中安裝scrapy-splash包

pip install scrapy-splash

4. 在scrapy中使用splash

以baidu為例

4.1 創(chuàng)建項目創(chuàng)建爬蟲

scrapy startproject test_splash
cd test_splash
scrapy genspider no_splash baidu.com
scrapy genspider with_splash baidu.com

4.2 完善settings.py配置文件

settings.py文件中添加splash的配置以及修改robots協(xié)議

# 渲染服務(wù)的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

spiders/no_splash.py中完善

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 使用splash

import 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服務(wù)的固定參數(shù)

    def parse_splash(self, response):
        with open('with_splash.html', 'w') as f:
            f.write(response.body.decode())

4.5 分別運行倆個爬蟲,并觀察現(xiàn)象

4.5.1 分別運行倆個爬蟲

scrapy crawl no_splash
scrapy crawl with_splash

4.5.2 觀察獲取的倆個html文件

不使用splash

在這里插入圖片描述

使用splash

在這里插入圖片描述

4.6 結(jié)論

  • splash類似selenium,能夠像瀏覽器一樣訪問請求對象中的url地址
  • 能夠按照該url對應(yīng)的響應(yīng)內(nèi)容依次發(fā)送請求
  • 并將多次請求對應(yīng)的多次響應(yīng)內(nèi)容進行渲染
  • 最終返回渲染后的response響應(yīng)對象

5. 了解更多

關(guān)于splash http://m.fzitv.net/article/219166.htm

關(guān)于scrapy_splash(截屏,get_cookies等) https://www.e-learn.cn/content/qita/800748

6. 小結(jié)

1.scrapy_splash組件的作用

  • splash類似selenium,能夠像瀏覽器一樣訪問請求對象中的url地址
  • 能夠按照該url對應(yīng)的響應(yīng)內(nèi)容依次發(fā)送請求
  • 并將多次請求對應(yīng)的多次響應(yīng)內(nèi)容進行渲染
  • 最終返回渲染后的response響應(yīng)對象

2.scrapy_splash組件的使用

  • 需要splash服務(wù)作為支撐
  • 構(gòu)造的request對象變?yōu)閟plash.SplashRequest
  • 以下載中間件的形式使用
  • 需要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'

到此這篇關(guān)于爬蟲進階-JS自動渲染之Scrapy_splash組件的使用的文章就介紹到這了,更多相關(guān)js Scrapy_splash組件使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端常用6種數(shù)據(jù)加密方式的使用詳細講解

    前端常用6種數(shù)據(jù)加密方式的使用詳細講解

    在前端開發(fā)中,常用的數(shù)據(jù)加密技術(shù)包括Base64編碼、MD5哈希、SHA-256哈希、AES對稱加密、RSA非對稱加密和HMAC消息認證碼,這些加密方式提供了不同層次的數(shù)據(jù)安全保護,適用于不同的安全需求和場景,需要的朋友可以參考下
    2024-09-09
  • js實現(xiàn)簡單div拖拽功能實例

    js實現(xiàn)簡單div拖拽功能實例

    這篇文章主要介紹了js實現(xiàn)簡單div拖拽功能的方法,實例分析了javascript針對div層拖拽的實現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • 基于bootstrap實現(xiàn)收縮導(dǎo)航條

    基于bootstrap實現(xiàn)收縮導(dǎo)航條

    這篇文章主要介紹了基于bootstrap實現(xiàn)收縮導(dǎo)航條的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Bootstrap 中data-[*] 屬性的整理

    Bootstrap 中data-[*] 屬性的整理

    本文給大家收藏整理了關(guān)于Bootstrap 中data-[*] 屬性的相關(guān)知識,感興趣的朋友一起看看吧
    2018-03-03
  • JavaScript中詭異的delete操作符

    JavaScript中詭異的delete操作符

    這篇文章主要介紹了JavaScript中詭異的delete操作符,本文講解了刪除對象的屬性、對數(shù)組的操作、對于變量的操作等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 詳解babel升級到7.X采坑總結(jié)

    詳解babel升級到7.X采坑總結(jié)

    這篇文章主要介紹了詳解babel升級到7.X采坑總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Echarts之懸浮框中的數(shù)據(jù)排序問題

    Echarts之懸浮框中的數(shù)據(jù)排序問題

    Echarts非常強大,配置也非常的多,有很多細節(jié)需要深入研究。這篇文章主要介紹了Echarts之懸浮框中的數(shù)據(jù)排序問題,需要的朋友可以參考下
    2018-11-11
  • Some tips of wmi scripting in jscript (1)

    Some tips of wmi scripting in jscript (1)

    Some tips of wmi scripting in jscript (1)...
    2007-04-04
  • 詳解ES6 Symbol 的用途

    詳解ES6 Symbol 的用途

    Symbol 唯一的用途就是標(biāo)識對象屬性,表明對象支持的功能。 這篇文章給大家介紹ES6 Symbol 的用途,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • jsonp的簡單介紹以及其安全風(fēng)險

    jsonp的簡單介紹以及其安全風(fēng)險

    JSONP原理就是動態(tài)插入帶有跨域url的script標(biāo)簽,然后調(diào)用回調(diào)函數(shù),把我們需要的json數(shù)據(jù)作為參數(shù)傳入,通過一些邏輯把數(shù)據(jù)顯示在頁面上,這篇文章主要給大家介紹了關(guān)于jsonp的簡單介紹以及其安全風(fēng)險的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評論

响水县| 蚌埠市| 靖边县| 宜丰县| 澄迈县| 普洱| 榆中县| 缙云县| 卢氏县| 荆门市| 嵩明县| 建瓯市| 集贤县| 柏乡县| 平塘县| 余干县| 鄢陵县| 丹东市| 宜良县| 宝应县| 东安县| 温州市| 临高县| 东宁县| 安仁县| 台东市| 海城市| 女性| 金湖县| 汝州市| 平安县| 龙门县| 五家渠市| 陆丰市| 安岳县| 武邑县| 沽源县| 都兰县| 曲靖市| 凤阳县| 彩票|