咱們把爬蟲已經寫好了,並且在本地能夠運行了。
這個不是最終的目的啊。
咱們是要在服務器上運行爬蟲。
真正的:雲爬蟲!雲爬蟲!雲爬蟲!
騰訊服務器,阿里雲服務器均可以
就在這裏再來一篇手把手的將爬蟲部署到服務器上吧。
絕對從0教學。
一步一步的來,還有截圖
讓你從『倔強青銅』殺到『最強王者』php
福利就要寫在最前面:
過大年了,你們是否是又有了壓歲錢了啊??啊哈哈哈哈,壓歲錢買糖吃還不如投資到本身身上。好比用來買課程,或者用來買服務器,來學習編程,寫爬蟲。來買服務器啊買服務器啊!只在本地跑,根本沒用的!恰巧,鏟屎官這裏就有上千元的阿里雲和騰訊雲的優惠券給你使用(每一款優惠只要點擊優惠連接,進入便可領取):html
阿里雲部分:
【阿里雲新人1888元雲產品通用代金券】:
promotion.aliyun.com/ntms/yunpar…python
【阿里雲爆款雲主機,2折優惠券】:
promotion.aliyun.com/ntms/act/qw…sql
【阿里雲企業級服務器2折優惠券】:
promotion.aliyun.com/ntms/act/en…數據庫
騰訊雲: 編程
【新客戶無門檻領取總價值高達2775元代金券,每種代金券限量500張,先到先得】:
cloud.tencent.com/redirect.ph…json
【騰訊雲服務器、雲數據庫特惠,3折優惠券】:
cloud.tencent.com/redirect.ph…windows
--接下來是正文--瀏覽器
你們好,我是鏟屎官,爲啥要寫這篇文章,就是爲了讓你上『最強王者』! Scrapy的文章,好多好多,可是99%的文章都是,寫完爬蟲就完事兒了,至於後來怎麼用?去哪裏用?都沒有交帶。我這裏就交代一種,能夠把你的小蟲子部署到服務器上!可是怎麼部署,安全
貌似你們對爬蟲仍是很跟興趣的。以前鏟屎官寫的幾篇爬蟲文章,你們能夠自行在網上搜索。都反響不錯,充分的激起了你們學習Python,運用Python的熱情。感受Python不在是那麼的死板,再也不是像教科書上的說明,是實實在在的能夠在平時運用,編寫的程序語言。因此,這篇咱們就稍微進階一下:
將咱們的爬蟲部署到騰訊雲服務器上面(阿里雲服務器同理)。廢話很少說,咱們就來實戰操做吧。
這裏選擇什麼雲服務都是能夠的,阿里雲,AWS,騰訊雲,其餘雲都是沒有問題的。部署方法基本同樣,這裏爲了方便,因此筆者選擇了騰訊雲來作講解。
既然咱們選擇了騰訊雲,首先去騰訊雲的官網,註冊登陸一下。
https://cloud.tencent.com/
複製代碼
當你看到這篇文章的時候,我不知道騰訊雲的優惠是怎樣的,反正我當時,給我了7天的雲服務器體驗。我就準備拿這個試試手。騰訊雲界面長這個樣子:
登陸以後,買完服務器以後,在雲服務器界面,就會看到你的服務器實例了:
界面上面有你服務器的ip地址,咱們遠程登陸,就須要知道服務器的公網ip地址:
本地我用Mac的terminal的ssh登陸,輸入指令就是:
$ ssh root@1XX.XXX.XXX.XXX
複製代碼
而後輸入密碼,登陸成功,就會顯示以下界面:
臥槽,能夠看到,有3萬屢次的嘗試登陸,看來服務器的權限若是設置的不夠安全的話,是很容易被別人攻破的。
OK,服務器的東西咱們就先暫時放到一邊。輸入
$ exit
複製代碼
退出登陸。咱們先來講說爬蟲的事兒。
這裏,咱們待部署的爬蟲,是用
這裏咱們部署的爬蟲只是我往後項目的一個簡單的版本,你能夠看『1024種子吞噬』。。。的Scrapy版本。
工程目錄仍是很簡單的,和標準的Scrapy建立目錄同樣:
至於工程怎麼寫,請參考[『「手把手」教你用爬蟲爬達蓋爾。。。。』]()文章。
咱們這期的爬蟲項目叫DailyWeb,裏面的蟲子叫Caolu。爬蟲『Caolu』的主要功能,就是從不一樣的主題區裏面,讀取當天發佈的帖子,而後將這些帖子的url,title,發佈時間和id都保存下來,存入數據庫中。
想要爬蟲源碼的同窗,請關注『皮爺擼碼』,裏面有不少爬蟲的文章哦。若是有什麼疑問,也能夠在公衆號裏面留言,我會一一查看的。
爬蟲就是這樣,咱們部署的任務,目前有兩個部分,遠端的服務器和咱們本地的電腦。咱們要把本地電腦的爬蟲部署到遠端的服務器上,上文中咱們提到了兩個東西Scrayd和Scrapyd-client這兩個東西,分別安裝的位置就是遠端服務器安Scrapyd,本地須要上傳的機器安裝Scrapy-client。那麼,咱們本地機器安裝scrapy-client。
$ pip isntall scrapy-client
複製代碼
安裝完成以後,咱們須要進入到你Scrapy工程目錄下,執行
$ scrapyd-deploy -l
複製代碼
就會生成一個scrapy.cfg
文件。這個文件就是項目的配置文件,裏面大概長這個樣子:
[settings]
default = DailyWeb.settings
[deploy]
#url = http://localhost:6800/
project = DailyWeb
複製代碼
這裏,咱們須要改一些東西,將url的註釋取消掉,同時,改爲你服務器的地址,再在deploy後面加上一個遠端地址的名字。
[settings]
default = DailyWeb.settings
[deploy:TencentCloud]
url = http://119.75.216.20:6800/
project = DailyWeb
複製代碼
OK,本地的配置到這裏就結束了。咱們接着以前的教程來登陸你遠端的服務器,登陸成功以後,咱們須要安裝Python3.6,以及Scrapyd等東西。
// 安裝依賴包
# yum -y groupinstall "Development tools"
# 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
// 下載 Python 3.6.2
# wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
// 建立安裝目錄
# mkdir /usr/local/python3
// 安裝 gcc
# yum -y install gcc
// 安裝 Python 3.6.2
# tar -xvJf Python-3.6.2.tar.xz
# cd Python-3.6.2
# ./configure --prefix=/usr/local/python3
# make && make install
// 安裝scrapyd
# pip3 install scrapyd
// 安裝scrapy
# pip3 install scrapy
// 安裝scrapyd-client
# pip3 install scrapyd-client
// 安裝BeautifulSoup4,由於爬蟲中用到了,因此這裏得安裝一下
# pip3 install bs4
複製代碼
安裝好以後,運行命令
# '/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
文件,咱們須要對這個文件修改一些東西。將文件修改爲一下樣式:
[settings]
default = DailyWeb.settings
[deploy:TencentCloud]
url = http://119.75.216.20:6800/
project = DailyWeb
複製代碼
而後本地按照scrapyd-deploy <host> -p <project>
輸入指令:
$ scrapyd-deploy TencentCloud -p DailyWeb
複製代碼
如果在這期間有錯誤,根據錯誤提示來自行安裝Python庫就好。等到部署成功,會出現以下畫面:
看到,服務器給咱們返回了一個json格式的結果。這個就是Scrapyd的最大特色,經過json來控制操做。上面顯示的是部署成功。
咱們若是想檢查部署的工程,按照scrapyd-deploy -L <host>
,在本地輸入命令:
$ scrapyd-deploy -L TencentCloud
複製代碼
結果以下:
看到咱們的DailyWeb爬蟲已經成功部署到了騰訊雲服務器上了。
咱們能夠通命令:
curl http://119.75.216.20:6800/listprojects.json
複製代碼
能夠看到遠端服務器上的爬蟲:
OK,咱們如今若是想要爬蟲啓動,那麼只須要輸入命令:
$ curl http://119.75.216.20:6800/schedule.json -d project=<project name> -d spider=<spider name>
複製代碼
咱們這裏輸入的命令則是:
$ curl http://119.75.216.20:6800/schedule.json -d project=DailyWeb -d spider=Caoliu
複製代碼
輸入完,本地的terminal會呈現:
咱們在瀏覽器裏,訪問服務器的6800端口,就可以在網頁的Jobs裏面看到爬蟲工做狀態了:
能夠看到,爬蟲的進度在Running裏面,當爬蟲爬完了,會在這個裏面:
咱們退到上級頁面,從Log裏面看,就發現有一條log文件。
23K的log文件,
文件的目錄在:
./logs/DailyWeb/Caoliu/290bee7261c411e8872052540089e098.log
複製代碼
打開以後,就能看到剛纔爬蟲運行時候留下來的Log了。關於Log怎麼打或者打什麼,這個是Scrapy框架裏本身寫好的,很是方便,直接導入python的logging庫,按照標準方法打印就能夠。
那麼,咱們應該如何取消一個Job呢?輸入命令:
curl http://119.75.216.20:6800/cancel.json -d project=<project name> -d job=<job id>
複製代碼
上面的job id,就是在Jobs頁面裏面看到的。
若是要移除一個工程,命令則是:
curl 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爬蟲部署到服務器上的教程。
關注這個神奇的公衆號,裏面會有神奇代碼哦