Scrapy學(xué)習(xí)篇(十三)之scrapy-splash

之前我們學(xué)習(xí)的內(nèi)容都是抓取靜態(tài)頁面,每次請求立膛,它的網(wǎng)頁全部信息將會一次呈現(xiàn)出來揪罕。 但是,像比如一些購物網(wǎng)站宝泵,他們的商品信息都是js加載出來的好啰,并且會有ajax異步加載。像這樣的情況儿奶,直接使用scrapy的Request請求是拿不到我們想要的信息的框往,解決的方法就是使用scrapy-splash。

scrapy-splash加載js數(shù)據(jù)是基于Splash來實現(xiàn)的闯捎,Splash是一個Javascript渲染服務(wù)椰弊。它是一個實現(xiàn)了HTTP API的輕量級瀏覽器许溅,Splash是用Python實現(xiàn)的,同時使用Twisted和QT秉版,而我們使用scrapy-splash最終拿到的response相當(dāng)于是在瀏覽器全部渲染完成以后贤重,拿到的渲染之后的網(wǎng)頁源代碼。

準(zhǔn)備環(huán)節(jié)

  • 安裝docker

    在windows環(huán)境下清焕,安裝docker簡便的方法是使用docker toolbox游桩,由于Docker引擎的守護(hù)進(jìn)程使用的是Linux的內(nèi)核,所以我們不能夠直接在windows中運行docker引擎耐朴。而是需要在你的機(jī)器上創(chuàng)建和獲得一個Linux虛擬機(jī)借卧,用這個虛擬機(jī)才可以在你的windows系統(tǒng)上運行Docker引擎,docker toolbox這個工具包里面集成了windows環(huán)境下運行docker必要的工具筛峭,當(dāng)然也包括虛擬機(jī)了铐刘。

    首先下載docker toolbox
    執(zhí)行安裝程序,默認(rèn)情況下影晓,你的計算機(jī)會安裝以下幾個程序

    • Windows版的Docker客戶端
    • Docker Toolbox管理工具和ISO鏡像
    • Oracle VM 虛擬機(jī)
    • Git 工具

    當(dāng)然镰吵,如果你之前已經(jīng)安裝過了Oracle VM 虛擬機(jī) 或者 Git 工具 ,那么你在安裝的時候可以取消勾選這兩個內(nèi)容挂签,之后疤祭,你只需要狂點下一步即可。安裝完畢以后饵婆,找到Docker Quickstart Terminal圖標(biāo)勺馆,雙擊運行,稍等它自己配置一小段時間侨核,你會看到以下的界面


    請注意上面畫紅框的地方草穆,這是默認(rèn)分配給你的ip,下面會用到搓译。至此悲柱,docker工具就已經(jīng)安裝好了。

  • 安裝Splash

    雙擊運行Docker Quickstart Terminal些己,輸入以下內(nèi)容
    docker pull scrapinghub/splash
    這個命令是拉取Splash鏡像豌鸡,等待一算時間,就可以了段标。

    下面就是啟動Splash
    docker run -p 8050:8050 scrapinghub/splash
    這個命令就是在計算機(jī)的8050端口啟動Splash渲染服務(wù)
    你會看到以下的圖示內(nèi)容涯冠。

    這個時候,打開你的瀏覽器怀樟,輸入192.168.99.100:8050你會看到出現(xiàn)了這樣的界面功偿。


    你可以在上圖紅色框框的地方輸入任意的網(wǎng)址,點擊后面的Render me! 來查看渲染之后的樣子。

  • 安裝scrapy-splash

    pip install scrapy-splash

    至此械荷,我們的準(zhǔn)備環(huán)節(jié)已經(jīng)全部結(jié)束了共耍。

測試

下面我們就創(chuàng)建一個項目來測試一下,是否真的實現(xiàn)了我們想要的功能吨瞎。

不使用scrapy-splash

為了有一個直觀的對比痹兜,我們首先不使用scrapy- splash,來看一下是什么效果颤诀,我們以淘寶商品信息為例字旭,新建一個名為taobao的項目,在spider.py文件里面輸入下面的內(nèi)容崖叫。

import scrapy



class Spider(scrapy.Spider):
    name = 'taobao'
    allowed_domains = []
    start_urls = ['https://s.taobao.com/search?q=%E7%BE%8E%E9%A3%9F']

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self,response):
        titele = response.xpath('//div[@class="row row-2 title"]/a/text()').extract()
        print('這是標(biāo)題:', titele)

我們打印出淘寶美食的名稱遗淳,你會看到這樣的信息:


使用scrapy-splash

下面我們使用scrapy-splash來實現(xiàn)一下,看一下會出現(xiàn)什么樣的效果:
使用scrapy-splash需要一些額外的配置心傀,下面一一列舉:
在settings.py文件中屈暗,你需要額外的填寫下面的一些內(nèi)容

# 渲染服務(wù)的url
SPLASH_URL = 'http://192.168.99.100: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'

在spider.py文件中,填入下面的代碼:

import scrapy
from scrapy_splash import SplashRequest

class Spider(scrapy.Spider):
    name = 'taobao'
    allowed_domains = []
    start_urls = ['https://s.taobao.com/search?q=%E7%BE%8E%E9%A3%9F']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url=url, callback=self.parse,
                                args={'wait':1}, endpoint='render.html')

    def parse(self, response):
        titele = response.xpath('//div[@class="row row-2 title"]/a/text()').extract()
        print('這是標(biāo)題:', titele)

記住不要忘記導(dǎo)入SplashRequest脂男。

下面就是運行這個項目养叛,記得在docker里面先把splash渲染服務(wù)運行起來。
結(jié)果如下圖所示宰翅。


看的出來弃甥,我們需要的內(nèi)容已經(jīng)打印出來了,內(nèi)容有點亂汁讼,我們可以使用正則來進(jìn)行匹配淆攻,但是這已經(jīng)不是我們這一小節(jié)的主要內(nèi)容了,你可以自己嘗試一下掉缺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卜录,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眶明,更是在濱河造成了極大的恐慌,老刑警劉巖筐高,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搜囱,死亡現(xiàn)場離奇詭異,居然都是意外死亡柑土,警方通過查閱死者的電腦和手機(jī)蜀肘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稽屏,“玉大人扮宠,你說我怎么就攤上這事『疲” “怎么了坛增?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵获雕,是天一觀的道長。 經(jīng)常有香客問我收捣,道長届案,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任罢艾,我火速辦了婚禮楣颠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咐蚯。我一直安慰自己童漩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布春锋。 她就那樣靜靜地躺著睁冬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看疙。 梳的紋絲不亂的頭發(fā)上豆拨,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音能庆,去河邊找鬼施禾。 笑死,一個胖子當(dāng)著我的面吹牛搁胆,可吹牛的內(nèi)容都是我干的弥搞。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼渠旁,長吁一口氣:“原來是場噩夢啊……” “哼攀例!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顾腊,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤粤铭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杂靶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梆惯,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年吗垮,在試婚紗的時候發(fā)現(xiàn)自己被綠了垛吗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡烁登,死狀恐怖怯屉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤锨络,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布赌躺,位于F島的核電站,受9級特大地震影響足删,放射性物質(zhì)發(fā)生泄漏寿谴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一失受、第九天 我趴在偏房一處隱蔽的房頂上張望讶泰。 院中可真熱鬧,春花似錦拂到、人聲如沸痪署。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狼犯。三九已至,卻和暖如春领铐,著一層夾襖步出監(jiān)牢的瞬間悯森,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工绪撵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留瓢姻,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓音诈,卻偏偏與公主長得像幻碱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子细溅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 什么是splash Splash是一個Javascript渲染服務(wù)褥傍。它是一個實現(xiàn)了HTTP API的輕量級瀏覽器,...
    明慢慢閱讀 32,906評論 0 19
  • 注意: 該 Docker 版本為了支持 Docker 機(jī),于是不再支持 Boot2Docker 命令行喇聊。使用 Do...
    提莫隊長1234閱讀 4,590評論 0 8
  • 愛情的可貴承疲,在于稀有邻耕,在于難得。 ——題記 過了好久燕鸽,我才敢提筆寫這個故...
    巫小皇閱讀 368評論 0 1
  • 今天按計劃跑步80分鐘啊研,心率控制在145左右。今天天氣不錯,跑步時間從十一點開始党远,十二點多結(jié)束削解。計劃跑完回來洗個澡...
    無邊無際123閱讀 223評論 0 0
  • 斟碎的傳奇,蕩散的文筆沟娱,還拼命去阻絕氛驮,沒什么道理,放飛回不去的一切流言蜚語济似,沉默不語矫废。 我沒有想家,我不會詞句砰蠢,讓...
    鬧芯芯閱讀 238評論 1 2