【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

皮克啪的鏟屎官發表於2019-03-04

接著之前的幾篇文章說。
我把爬蟲已經寫好了,而且在本地可以執行了。
這個不是最終的目的啊。
我們是要在伺服器上執行爬蟲。
利用週末,同時騰訊送的7天雲伺服器體驗也快到期了
就在這裡再來一篇手把手的將爬蟲部署到伺服器上吧。
絕對從0教學。
一步一步的來,還有截圖
讓你從『倔強青銅』殺到『最強王者』

為啥要寫這篇文章,就是為了讓你上『最強王者』! Scrapy的文章,好多好多,但是99%的文章都是,寫完爬蟲就完事兒了,至於後來怎麼用?去哪裡用?都沒有交帶。我這裡就交代一種,可以把你的小蟲子部署到伺服器上!但是怎麼部署,

當你去百度查『scrapy爬蟲部署』的時候
,有幾篇文章說,用Scrapyd,但是,他們都只是簡單的,在windows機器上部署,而且都是部署到本地。
對於想要大展巨集圖的你,根本沒有幫助
那麼,就讓我來做這個引路人,帶你一步一步的,將Scrapy爬蟲,通過Scrapyd來部署到遠端的騰訊雲伺服器上吧!

從前幾排文章來看,貌似大家對爬蟲還是很跟興趣的。之前寫的兩篇文章『【Python實戰】手把手超詳細教程教你Scrapy爬達蓋爾社群,有彩蛋』『【Python實戰】用Scrapy編寫“1024網站種子吞噬爬蟲”』都反響不錯,充分的激起了大家學習Python,運用Python的熱情。感覺Python不在是那麼的死板,不再是像教科書上的說明,是實實在在的可以在平時運用,編寫的程式語言。所以,這篇我們就稍微進階一下:

將我們的爬蟲部署到騰訊雲伺服器上面。廢話不多說,我們就來實戰操作吧。

這裡選擇什麼雲服務都是可以的,阿里雲,AWS,騰訊雲,其他雲都是沒有問題的。部署方法基本一樣,這裡為了方便,所以筆者選擇了騰訊雲來做講解。

既然我們選擇了騰訊雲,首先去騰訊雲的官網,註冊登入一下。

1https://cloud.tencent.com/
複製程式碼

當你看到這篇文章的時候,我不知道騰訊雲的優惠是怎樣的,反正我當時,給我了7天的雲伺服器體驗。我就準備拿這個試試手。騰訊雲介面長這個樣子:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

登入之後,買完伺服器之後,在雲伺服器介面,就會看到你的伺服器例項了:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

介面上面有你伺服器的ip地址,我們遠端登入,就需要知道伺服器的公網ip地址:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

本地我用Mac的terminal的ssh登入,輸入指令就是:

1$ ssh root@1XX.XXX.XXX.XXX
複製程式碼

然後輸入密碼,登入成功,就會顯示如下介面:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

臥槽,可以看到,有3萬多次的嘗試登入,看來伺服器的許可權如果設定的不夠安全的話,是很容易被別人攻破的。

OK,伺服器的東西我們就先暫時放到一邊。輸入

1$ exit
複製程式碼

退出登入。我們先來說說爬蟲的事兒。

這裡,我們待部署的爬蟲,是用

Scrapy
寫的。我們要用到的工具,有Scrapyd和Scrapyd-client。這兩個是專門用來部署Scrapy爬蟲的東西。OK,既然要部署爬蟲,我們就來先看一下我們的爬蟲長什麼樣子。

這裡我們部署的爬蟲只是我日後專案的一個簡單的版本,你可以看『1024種子吞噬』『“手把手”教你用爬蟲爬達蓋爾社群』這兩個文章裡面的爬蟲,裡面還有詳細的編寫爬蟲的指導教程。所以,今天我們部署的爬蟲,是最早的一篇用requests寫的爬蟲『【Python實戰】用程式碼來訪問1024網站』的Scrapy版本。

之所以好部署這個,是為了日後在我的公眾號『皮克啪的鏟屎官』裡面,加入『Daily1024』自動回覆的功能而做準備。以後也會推出這樣的文章,敬請期待
。好了,現在就簡單介紹一下這個待部署的爬蟲長什麼樣子。

工程目錄還是很簡單的,和標準的Scrapy建立目錄一樣:

【Python實戰】用Scrapyd把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,如下圖:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

Scrapyd啟動後,是可以通過訪問6800埠檢視到網頁資訊的。那麼這裡我們如果想通過外網ip訪問到網頁,是失敗的
,我們需要做一些修改需要修改一些設定。

首先,我們得修改default_scrapyd.conf檔案。這個問題件的路徑在下面:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

我們需要將 bind_address = 127.0.0.1 改為 bind_address = 0.0.0.0,這樣,就可以通過外部訪問本地的ip了:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

接著,我們還需要給我們的雲伺服器配置一下安全組,要把6800的介面許可權開通,這樣才能夠通過外網訪問到伺服器的網頁。

騰訊雲的控制檯頁面,左側選擇安全組,

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋
選擇新建按鈕,我們這裡選擇常用的埠暴露,即第二個。

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

然後選擇修改規則,因為我們要把6800加進去。

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

選擇新增規則,將ip設定成 0.0.0.0/0 即全網ip,埠寫 tcp:6800,選擇允許,然後點選確定。

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

安全組新增好了,那麼我們回到伺服器例項頁面,在更多裡面選擇配置安全組:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

選擇我們剛才新增的那個安全組,點選確定。

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

OK,

現在就是見證奇蹟的時刻
,在自己的瀏覽器裡面,輸入自己伺服器的公網ip再加6800埠號,比如我,我的伺服器公網ip是:119.75.216.20,那麼我在瀏覽器裡面輸入的網址就應該是119.75.216.20:6800。這樣,
就可以看到Scrapyd的頁面!!

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

由於我們還沒有部署爬蟲,所以,點選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庫就好。等到部署成功,會出現如下畫面:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

看到,伺服器給我們返回了一個json格式的結果。這個就是Scrapyd的最大特點,通過json來控制操作。上面顯示的是部署成功。

我們如果想檢查部署的工程,按照scrapyd-deploy -L <host>,在本地輸入命令:

1$ scrapyd-deploy -L TencentCloud
複製程式碼

結果如下:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

看到我們的DailyWeb爬蟲已經成功部署到了騰訊雲伺服器上了。

我們可以通命令:

1curl http://119.75.216.20:6800/listprojects.json
複製程式碼

可以看到遠端伺服器上的爬蟲:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

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會呈現:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

我們在瀏覽器裡,訪問伺服器的6800埠,就能夠在網頁的Jobs裡面看到爬蟲工作狀態了:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

可以看到,爬蟲的進度在Running裡面,當爬蟲爬完了,會在這個裡面:

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

我們退到上級頁面,從Log裡面看,就發現有一條log檔案。

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

23K的log檔案,

【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋

檔案的目錄在:

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大神
對於優秀的人而言,獎勵是必須的,可以關注『皮克啪的鏟屎官』,回覆『伺服器爬蟲』,即可獲得爬蟲的原始碼,同時,可以多試試回覆幾次,說不定有驚喜呢。

最後感言一下,為什麼要寫這種手把手,一步一步來操作的文章,是因為,好多同學都聽說過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的神奇程式碼哦

                                    【Python實戰】用Scrapyd把Scrapy爬蟲一步一步部署到騰訊雲上,有彩蛋



相關文章