接著之前的幾篇文章說。
我把爬蟲已經寫好了,而且在本地可以執行了。
這個不是最終的目的啊。
我們是要在伺服器上執行爬蟲。
利用週末,同時騰訊送的7天雲伺服器體驗也快到期了
就在這裡再來一篇手把手的將爬蟲部署到伺服器上吧。
絕對從0教學。
一步一步的來,還有截圖
讓你從『倔強青銅』殺到『最強王者』
為啥要寫這篇文章,就是為了讓你上『最強王者』! Scrapy的文章,好多好多,但是99%的文章都是,寫完爬蟲就完事兒了,至於後來怎麼用?去哪裡用?都沒有交帶。我這裡就交代一種,可以把你的小蟲子部署到伺服器上!但是怎麼部署,
從前幾排文章來看,貌似大家對爬蟲還是很跟興趣的。之前寫的兩篇文章『【Python實戰】手把手超詳細教程教你Scrapy爬達蓋爾社群,有彩蛋』和『【Python實戰】用Scrapy編寫“1024網站種子吞噬爬蟲”』都反響不錯,充分的激起了大家學習Python,運用Python的熱情。感覺Python不在是那麼的死板,不再是像教科書上的說明,是實實在在的可以在平時運用,編寫的程式語言。所以,這篇我們就稍微進階一下:
將我們的爬蟲部署到騰訊雲伺服器上面。廢話不多說,我們就來實戰操作吧。
這裡選擇什麼雲服務都是可以的,阿里雲,AWS,騰訊雲,其他雲都是沒有問題的。部署方法基本一樣,這裡為了方便,所以筆者選擇了騰訊雲來做講解。
既然我們選擇了騰訊雲,首先去騰訊雲的官網,註冊登入一下。
1https://cloud.tencent.com/
複製程式碼
當你看到這篇文章的時候,我不知道騰訊雲的優惠是怎樣的,反正我當時,給我了7天的雲伺服器體驗。我就準備拿這個試試手。騰訊雲介面長這個樣子:
登入之後,買完伺服器之後,在雲伺服器介面,就會看到你的伺服器例項了:
介面上面有你伺服器的ip地址,我們遠端登入,就需要知道伺服器的公網ip地址:
本地我用Mac的terminal的ssh登入,輸入指令就是:
1$ ssh root@1XX.XXX.XXX.XXX
複製程式碼
然後輸入密碼,登入成功,就會顯示如下介面:
臥槽,可以看到,有3萬多次的嘗試登入,看來伺服器的許可權如果設定的不夠安全的話,是很容易被別人攻破的。
OK,伺服器的東西我們就先暫時放到一邊。輸入
1$ exit
複製程式碼
退出登入。我們先來說說爬蟲的事兒。
這裡,我們待部署的爬蟲,是用
這裡我們部署的爬蟲只是我日後專案的一個簡單的版本,你可以看『1024種子吞噬』和『“手把手”教你用爬蟲爬達蓋爾社群』這兩個文章裡面的爬蟲,裡面還有詳細的編寫爬蟲的指導教程。所以,今天我們部署的爬蟲,是最早的一篇用requests寫的爬蟲『【Python實戰】用程式碼來訪問1024網站』的Scrapy版本。
工程目錄還是很簡單的,和標準的Scrapy建立目錄一樣:
至於工程怎麼寫,請參考『“手把手”教你用爬蟲爬達蓋爾社群』文章。
我們這期的爬蟲專案叫DailyWeb,裡面的蟲子叫Caoliu。爬蟲『Caoliu』的主要功能,就是從不同的主題區裡面,讀取當天釋出的帖子,然後將這些帖子的url,title,釋出時間和id都儲存下來,存入資料庫中。
想要爬蟲原始碼的同學,請關注『皮克啪的鏟屎官』,回覆『部署伺服器爬蟲』即可獲得。如果有什麼疑問,也可以在公眾號裡面留言,我會一一檢視的。
爬蟲就是這樣,我們部署的任務,目前有兩個部分,遠端的伺服器和我們本地的電腦。我們要把本地電腦的爬蟲部署到遠端的伺服器上,上文中我們提到了兩個東西Scrayd和Scrapyd-client這兩個東西,分別安裝的位置就是遠端伺服器安Scrapyd,本地需要上傳的機器安裝Scrapy-client。那麼,我們本地機器安裝scrapy-client。
1$ pip isntall scrapy-client
複製程式碼
安裝完成之後,我們需要進入到你Scrapy工程目錄下,執行
1$ scrapyd-deploy -l
複製程式碼
就會生成一個scrapy.cfg
檔案。這個檔案就是專案的配置檔案,裡面大概長這個樣子:
1[settings]
2default = DailyWeb.settings
3
4[deploy]
5#url = http://localhost:6800/
6project = DailyWeb
複製程式碼
這裡,我們需要改一些東西,將url的註釋取消掉,同時,改成你伺服器的地址,再在deploy後面加上一個遠端地址的名字。
1[settings]
2default = DailyWeb.settings
3
4[deploy:TencentCloud]
5url = http://119.75.216.20:6800/
6project = DailyWeb
複製程式碼
OK,本地的配置到這裡就結束了。我們接著之前的教程來登入你遠端的伺服器,登入成功之後,我們需要安裝Python3.6,以及Scrapyd等東西。
1 // 安裝依賴包
2# yum -y groupinstall "Development tools"
3# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
4
5 // 下載 Python 3.6.2
6# wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
7
8 // 建立安裝目錄
9# mkdir /usr/local/python3
10
11 // 安裝 gcc
12# yum -y install gcc
13
14 // 安裝 Python 3.6.2
15# tar -xvJf Python-3.6.2.tar.xz
16# cd Python-3.6.2
17# ./configure --prefix=/usr/local/python3
18# make && make install
19
20 // 安裝scrapyd
21# pip3 install scrapyd
22
23 // 安裝scrapy
24# pip3 install scrapy
25 // 安裝scrapyd-client
26# pip3 install scrapyd-client
27 // 安裝BeautifulSoup4,因為爬蟲中用到了,所以這裡得安裝一下
28# pip3 install bs4
複製程式碼
安裝好之後,執行命令
1# '/usr/local/python3/bin/scrapyd'
複製程式碼
會啟動scrapyd,如下圖:
首先,我們得修改default_scrapyd.conf
檔案。這個問題件的路徑在下面:
我們需要將 bind_address = 127.0.0.1
改為 bind_address = 0.0.0.0
,這樣,就可以通過外部訪問本地的ip了:
接著,我們還需要給我們的雲伺服器配置一下安全組,要把6800的介面許可權開通,這樣才能夠通過外網訪問到伺服器的網頁。
騰訊雲的控制檯頁面,左側選擇安全組,
然後選擇修改規則,因為我們要把6800加進去。
選擇新增規則,將ip設定成 0.0.0.0/0
即全網ip,埠寫 tcp:6800
,選擇允許
,然後點選確定。
安全組新增好了,那麼我們回到伺服器例項頁面,在更多裡面選擇配置安全組:
選擇我們剛才新增的那個安全組,點選確定。
OK,
119.75.216.20:6800
。這樣,由於我們還沒有部署爬蟲,所以,點選Jobs和Logs連結進去之後,都是空頁面。
啊,我的快捷標籤大家就別關注了。看到這個頁面就說明你的Scrapyd在遠端的伺服器上面已經跑成功了。
當然,這些埠6800什麼的,都是可以配置的,配置檔案就是在上面所說的那個default_scrapyd.conf
檔案。最關鍵的就是要給伺服器配置安全組,將對應的埠開放,否則訪問不成功。
好了,接下來,我們就該關注本地了,將我們的爬蟲部署到伺服器上。
本地進入到爬蟲工程的目錄。因為剛才輸入了$ scrapyd-deploy -l
生成了一個scrapy.cfg
檔案,我們需要對這個檔案修改一些東西。將檔案修改成一下樣式:
1[settings]
2default = DailyWeb.settings
3
4[deploy:TencentCloud]
5url = http://119.75.216.20:6800/
6project = DailyWeb
複製程式碼
然後本地按照scrapyd-deploy <host> -p <project>
輸入指令:
1$ scrapyd-deploy TencentCloud -p DailyWeb
複製程式碼
若是在這期間有錯誤,根據錯誤提示來自行安裝Python庫就好。等到部署成功,會出現如下畫面:
看到,伺服器給我們返回了一個json格式的結果。這個就是Scrapyd的最大特點,通過json來控制操作。上面顯示的是部署成功。
我們如果想檢查部署的工程,按照scrapyd-deploy -L <host>
,在本地輸入命令:
1$ scrapyd-deploy -L TencentCloud
複製程式碼
結果如下:
看到我們的DailyWeb爬蟲已經成功部署到了騰訊雲伺服器上了。
我們可以通命令:
1curl http://119.75.216.20:6800/listprojects.json
複製程式碼
可以看到遠端伺服器上的爬蟲:
OK,我們現在如果想要爬蟲啟動,那麼只需要輸入命令:
1$ curl http://119.75.216.20:6800/schedule.json -d project=<project name> -d spider=<spider name>
複製程式碼
我們這裡輸入的命令則是:
1$ curl http://119.75.216.20:6800/schedule.json -d project=DailyWeb -d spider=Caoliu
複製程式碼
輸入完,本地的terminal會呈現:
我們在瀏覽器裡,訪問伺服器的6800埠,就能夠在網頁的Jobs裡面看到爬蟲工作狀態了:
可以看到,爬蟲的進度在Running裡面,當爬蟲爬完了,會在這個裡面:
我們退到上級頁面,從Log裡面看,就發現有一條log檔案。
23K的log檔案,
檔案的目錄在:
1./logs/DailyWeb/Caoliu/290bee7261c411e8872052540089e098.log
複製程式碼
開啟之後,就能看到剛才爬蟲執行時候留下來的Log了。關於Log怎麼打或者打什麼,這個是Scrapy框架裡自己寫好的,非常方便,直接匯入python的logging庫,按照標準方法列印就可以。
那麼,我們應該如何取消一個Job呢?輸入命令:
1 curl http://119.75.216.20:6800/cancel.json -d project=<project name> -d job=<job id>
複製程式碼
上面的job id,就是在Jobs頁面裡面看到的。
如果要移除一個工程,命令則是:
1curl http://119.75.216.20:6800/delproject.json -d project=<project>
複製程式碼
這裡說一個奇淫巧技,由於伺服器的scrapyd需要後臺執行,這裡我採用了# setsid scrapyd
命令來後臺開啟服務,這樣關閉視窗後仍能進行連線。需要結束scrapyd程式時,利用# ps -ef | grep -i scrapyd
檢視PID號,再# kill -9 PID
結束程式。
若是想要固定的去執行爬蟲,這裡可以使用Linux自帶的crontab
。這個我還沒研究,應該不難,等下一步了可以放出來給大家。
OK,到此為止,如果你能跟著我的步驟一步一步做到這裡,首先恭喜你,說明你很優秀,很有毅力,絕對是個程式設計的料,而且還有可能成為
最後感言一下,為什麼要寫這種手把手,一步一步來操作的文章,是因為,好多同學都聽說過Python,而且對Pyton抱有期待,想去學。但是,好多同學非科班出身,或者之前就從來沒學習過程式設計,哪像我們這種程式設計的老油條,拿到一門語言都有自己獨特的學習方法能夠快速掌握。這些同學就很困惑,因為大家都說Python好,Python好學,Python容易,Python簡單,Python能幹很多事情事情。。。但是當自己面對Python的時候,Python確是一座大山。沒有人給他指引道路,沒有人告訴他,那片叢林第幾棵樹和第幾棵樹之間有通往下一關的道路,導致他們很苦惱,很困惑,從而就會打擊學習程式設計的積極性,就會產生“Python這麼簡單我都不會,看來我不是學習程式設計的料”這種負能量的想法。同學!這樣想是不對的!學習程式設計,你要堅持啊!羅馬並非一日建成的,任何看似熟練的技能,都是背後日日夜夜反覆打磨出來的結果。你如果對Python感興趣,喜歡學Python,我可以給你帶路,我寫這種手把手的文章,就是為了給你們引路,讓更多的同學來投入到他們熱愛的程式設計學習中,體驗程式設計的快樂。若是你想學習,想改變自己,或者周圍有同學想學習程式設計,請你手動把這篇文章分享出去,我希望,通過有趣的實戰Python專案,能夠讓Python程式設計不再那麼空洞,而且,新手來了可以根據我的步驟一步一步來,感受程式執行起來的快樂。您的分享,就是對我最大的支援。
OK,以上就是這期手把手一步一步將Scrapy爬蟲部署到伺服器上的教程。
推薦閱讀
【Python實戰】用程式碼在1024論壇實現自動回貼,快速升級,有彩蛋
【Python實戰】手把手超詳細教程教你Scrapy爬達蓋爾社群,有彩蛋
【Python實戰】用Scrapy編寫“1024網站種子吞噬爬蟲”,送福利
【Python實戰】用程式碼來訪問1024網站,送福利
關注這個神奇的公眾號,裡面會有1024的神奇程式碼哦