docker+python無頭瀏覽器爬蟲

摘要:海量數(shù)據(jù)從哪兒來?世上本無所謂大數(shù)據(jù)的,爬的多了董朝,自然就有數(shù)據(jù)了。 為什么使用docker? 這兩年網(wǎng)上關(guān)于docker的討論不亞于當年的云計算干跛,現(xiàn)在云計算已經(jīng)落地生根了子姜。

海量數(shù)據(jù)從哪兒來?世上本無所謂大數(shù)據(jù)的驯鳖,爬的多了闲询,自然就有數(shù)據(jù)了。

為什么使用docker?

這兩年網(wǎng)上關(guān)于docker的討論不亞于當年的云計算浅辙,現(xiàn)在云計算已經(jīng)落地生根了扭弧。云時代docker被寄予厚望現(xiàn)在也是火的一塌糊涂。

作為一名開發(fā)人員记舆,你是否還在因為環(huán)境搭不成功而沮喪鸽捻?你是否經(jīng)常對于復(fù)雜的安裝步驟感到反感,因而對新技術(shù)望而卻步泽腮?

作為一名運維人員御蒲,你是否經(jīng)常因為不同操作系統(tǒng)的原因?qū)е虏渴鹗。?/p>

那么docker就是為了解決這些痛點而生的诊赊。docker不是什么新技術(shù)厚满,類似docker的東西早已有之,只不過docker用起來更爽碧磅,你真的應(yīng)該試一試碘箍,就像指紋解鎖一樣。用了你就回不去了鲸郊。

為什么是無頭瀏覽器丰榴?

現(xiàn)在許多網(wǎng)站有反爬蟲功能。我們要做的就是盡量把我們的請求偽裝成是真正的瀏覽器發(fā)出的一樣秆撮。最好就直接用瀏覽器來發(fā)送請求四濒,比如使用WebDriver驅(qū)動瀏覽器模擬真人操作。但是這樣速度太慢,再說服務(wù)器的linux一般都是server版的盗蟆,根本沒有桌面戈二,因此也沒有瀏覽器可用。所以我們就使用無頭(headless)瀏覽器喳资。功能跟真的瀏覽器一樣挽拂,速度更快,只不過沒有界面罷了骨饿。

1.虛擬機安裝ubunt16.04。(略)

2.安裝docker台腥。ubuntu14以上自帶docker宏赘,直接安裝即可

ubt1606@ubt1606-virtual-machine:~$docker

The program 'docker' is currently not installed. You can install it by typing:

sudo apt install docker.io

ubt1606@ubt1606-virtual-machine:~$sudo apt install docker.io

ubt1606@ubt1606-virtual-machine:~$docker images

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

ubuntu里需要在docker命令前面加sudo,否則會報上述信息黎侈。

ubt1606@ubt1606-virtual-machine:~$sudo docker images

REPOSITORY ? ? ? ? ?TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE

如果嫌每次輸入docker命令都要加sudo麻煩察署,可以把當前用戶加入docker用戶組。具體參考這篇文章

3.拉docker鏡像

直接訪問docker hub比較慢峻汉。通過daocloud來訪問稍微快一些贴汪。 在虛擬機瀏覽器里打開?http://www.daocloud.io/。 然后注冊用戶或者直接用微信掃二維碼登錄休吠。登錄后點擊“鏡像倉庫”扳埂。點擊“DockerHub鏡像”。 從這里可以打開docker官方的鏡像倉庫瘤礁,然后在里面搜索你要的鏡像即可阳懂。

搜索python+selenium。其中有一個是這樣的“Container with python selenium for lazy people (like me) to avoid configuration xvfb on server.”柜思。這正是我們要的岩调。

這是這個地址https://hub.docker.com/r/pimuzzo/selenium-python-xvfb/

該作者還貼心的給了一個小demo。后面我們會用到赡盘。

ubt1606@ubt1606-virtual-machine:~$sudo docker pull pimuzzo/selenium-python

Using default tag: latest

Pulling repository docker.io/pimuzzo/selenium-python

Network timed out while trying to connect to https://index.docker.io/v1/repositories/pimuzzo/selenium-python/images. You may want to check your internet connection or if you are behind a proxy.

會發(fā)現(xiàn)拉不下來号枕,使用daocloud的加速器。注冊賬號登錄后陨享,點擊使用加速器葱淳,會給你一個專屬鏈接。 類似這樣

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://c4c833cb.m.daocloud.io

ubt1606@ubt1606-virtual-machine:~$sudo su

[sudo] password for ubt1606:

root@ubt1606-virtual-machine:/home/ubt1606#echo "DOCKER_OPTS=\"$DOCKER_OPTS --registry-mirror=http://c4c833cb.m.daocloud.io\"" >> /etc/default/docker

root@ubt1606-virtual-machine:/home/ubt1606#vi /etc/default/docker

查看一下/etc/default/docker文件里的確有了DOCKER_OPTS霉咨,小白溫馨提示蛙紫,退出vi的方法是。按一下ESC途戒,然后輸入:q

root@ubt1606-virtual-machine:/home/ubt1606#service docker restart

一定要重啟docker服務(wù)坑傅。注意剛才我切換到su用戶了,所以前面都沒有加sudo

注意這次我換成了 index.docker.io/pimuzzo/selenium-python-xvfb喷斋。這也是daocloud頁面上的唁毒。我就試了一下蒜茴,這次很快就成功了。

root@ubt1606-virtual-machine:/home/ubt1606#docker pull index.docker.io/pimuzzo/selenium-python-xvfb

Using default tag: latest

latest: Pulling from pimuzzo/selenium-python-xvfb

759d6771041e: Already exists

8836b825667b: Already exists

c2f5e51744e6: Already exists

a3ed95caeb02: Already exists

21fb0716901c: Already exists

9cc47e6dfb6f: Pull complete

08c1371dc842: Pull complete

0aa04c2152b2: Pull complete

db151fc54aee: Pull complete

3f0af4107074: Pull complete

00d9524b72cc: Pull complete

3ba8b369c5ab: Pull complete

aad0e22b9317: Pull complete

Digest: sha256:73b4aca6ecfc2a5bf392065cd07cf7fc89e5da61104492e7c04332f2bfd8da4d

Status: Downloaded newer image for pimuzzo/selenium-python-xvfb:latest

root@ubt1606-virtual-machine:/home/ubt1606#docker images

REPOSITORY ? ? ? ? ? ? ? ? ? ? TAG ? ? ? ? ? ? ? ? IMAGE ID ? ? ? ? ? ?CREATED ? ? ? ? ? ? SIZE

pimuzzo/selenium-python-xvfb ? latest ? ? ? ? ? ? ?18dba38c825a ? ? ? ?5 months ago ? ? ? ?615.4 MB

root@ubt1606-virtual-machine:/home/ubt1606#

docker images看到類似上述信息就表示鏡像拉取成功浆西。注意看SIZE的大小粉私。如果網(wǎng)速不好很可能會失敗。失敗的話只能多試幾次了近零。再不行就看看有沒有其他鏡像源诺核,實在不行就用open connect 吧(需要買vps)。也可以從別人那兒拷貝一個鏡像文件然后導(dǎo)入到docker里久信。不管你用什么辦法窖杀,只要能方便快速地把鏡像弄到docker里就行了。

====================================================================

到這一步環(huán)境上基本就OK了裙士。如果不是拉取鏡像這一步有點小曲折入客,操作還是非常簡單的,簡單到令人發(fā)指腿椎。 要知道拉取一個鏡像容易桌硫,制作一個鏡像可不容易,真的很麻煩的啃炸。 一個docker image能為我們節(jié)省多少時間啊铆隘。這個鏡像不光可以在開發(fā)的時候用,開發(fā)完了之后也是可以直接部署的肮帐。一舉兩得啊咖驮。 只有一點,就是開發(fā)的時候不太好debug训枢。所以做點小開發(fā)或者僅僅是測試某個特定的環(huán)境托修,或者嘗試新技術(shù),用docker實在是太方便了恒界。

4.編寫第一個小demo

直接使用docker鏡像上給的demo睦刃。把網(wǎng)址換成baidu。

在/home/ubt1606/demo下建立demo.py文件十酣。 注意ubt1606是用戶名

#!/usr/bin/env python

from pyvirtualdisplay import Display

from selenium import webdriver

display = Display(visible=0, size=(800, 600))

display.start()

# now Firefox will run in a virtual display.

# you will not see the browser.

browser = webdriver.Firefox()

browser.get('http://www.baidu.com')

print browser.title

browser.quit()

display.stop()

5.啟動容器并映射數(shù)據(jù)卷

docker run -ti -v /home/ubt1606/demo:/home/somethingpimuzzo/selenium_python_xvfb python /home/something/demo.py

docker run:啟動一個容器

-ti: ? ? ? 也可以寫成 -i -t涩拙,表示申請一個控制臺同容器交互。it分別是interact,terminal的首字母

-v /home/ubt1606/demo:/home/something:-v表示映射數(shù)據(jù)卷耸采。將主機的/home/ubt1606/demo文件夾映射到docker里的

/home/something文件夾兴泥。就像windows和VMWare共享文件夾一樣。

pimuzzo/selenium_python_xvfb:鏡像的名字虾宇,表示給哪個鏡像創(chuàng)建容器搓彻。鏡像是死的,只有容器才是活的。鏡像相當于一個

windows.iso文件旭贬。而容器相當于已經(jīng)啟動起來的windows怔接。

python /home/something/demo.py:運行docker里/home/something文件夾下的demo.py文件。注意路徑是docker里的路徑稀轨。

可以是其它路徑扼脐。 比如先把一個demo2.py放在/home/ubt1606/demo文件下,然后進入到docker里奋刽。在docker里將demo2.py從

/home/something下拷貝到/home/other文件夾下瓦侮,然后命令換成python /home/other/demo2.py即可。一定要理解“docker里”佣谐,“docker里的路徑”這個東西脏榆。為了不給自己找麻煩,建議就別拷貝到別處了台谍。

小結(jié)一下:

當我回頭看這篇文章時才發(fā)現(xiàn)其實就三步:

拉取一個docker鏡像。

寫一個demo.py文件并把這個文件映射到docker里吁断。

啟動容器運行demo.py文件趁蕊。

爬蟲的編寫其實就是用python版的webdriver來編寫程序。只不過這里沒有使用瀏覽器仔役,而是pyvirtualdisplay掷伙。

本來webdriver和selenium都是獨立的,現(xiàn)在整合到一塊都叫selenium了又兵。selenium官方宣稱是用來做自動化測試的任柜。

不過我看目前用的最多的還是webdriver。就是用它來寫爬蟲沛厨。本文只是拋磚引玉宙地,至于webdriver api的使用比較簡單,搞JavaEE的上手非衬嫫ぃ快宅粥,這里就不詳細介紹了。

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻电谣,本社區(qū)不擁有所有權(quán)秽梅,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容剿牺,歡迎發(fā)送郵件至:yqgroup@service.aliyun.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實一死,本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容周伦。

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臭增,更是在濱河造成了極大的恐慌懂酱,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊抛,死亡現(xiàn)場離奇詭異列牺,居然都是意外死亡,警方通過查閱死者的電腦和手機拗窃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門瞎领,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人随夸,你說我怎么就攤上這事九默。” “怎么了宾毒?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵驼修,是天一觀的道長。 經(jīng)常有香客問我诈铛,道長乙各,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任幢竹,我火速辦了婚禮耳峦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焕毫。我一直安慰自己蹲坷,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布邑飒。 她就那樣靜靜地躺著循签,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疙咸。 梳的紋絲不亂的頭發(fā)上懦底,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音罕扎,去河邊找鬼聚唐。 笑死,一個胖子當著我的面吹牛腔召,可吹牛的內(nèi)容都是我干的杆查。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼臀蛛,長吁一口氣:“原來是場噩夢啊……” “哼亲桦!你這毒婦竟也來了崖蜜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤客峭,失蹤者是張志新(化名)和其女友劉穎豫领,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舔琅,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡等恐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了备蚓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片课蔬。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖郊尝,靈堂內(nèi)的尸體忽然破棺而出二跋,到底是詐尸還是另有隱情,我是刑警寧澤流昏,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布扎即,位于F島的核電站,受9級特大地震影響况凉,放射性物質(zhì)發(fā)生泄漏铺遂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一茎刚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撤逢,春花似錦膛锭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至互例,卻和暖如春奢入,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媳叨。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工腥光, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人糊秆。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓武福,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痘番。 傳聞我的和親對象是個殘疾皇子捉片,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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