摘要:海量數(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)容周伦。