日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu服务器长时间运行爬虫程序

發(fā)布時間:2023/12/9 Ubuntu 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu服务器长时间运行爬虫程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用了一段時間的editplus之后,覺得很不方便,用pycharm又覺得很麻煩。
于是就讓我找到了兩個對新手很友好的編輯器。一個是Anaconda自帶的Spyder(功能強大,除了一些我目前不用的操作外,不亞于pycharm),還有一個則是jupyter(沒有自動補全,不過非常好用),兩個均是免費,百度就可以下載。

補充:Anaconda是一個第三方工具包,如果要概括一下它的好處的話:我裝scrapy只用了一個pip命令,沒有任何報錯。其實裝很多庫都是這樣,特別適合新手。(它有很多的內(nèi)置庫,而且能解決大部分依賴關系)
——————————————————————————————————————————————
最近想爬一個小型網(wǎng)站,目前已經(jīng)拿到的沒有去重的URL有30萬個(URL已經(jīng)去重,但不同的URL可能得到同樣的信息),我要進一步拿到URL的詳細信息,但因為網(wǎng)站服務器抗壓有限(前面的30萬個url是因為網(wǎng)站有api,我直接拿到的),基于爬蟲程序員的素質(zhì),我只能每爬一個URL就sleep幾秒,這樣就需要很長的一段時間了。(還是淘寶、知乎等大網(wǎng)站好,人家基本是你隨便爬,在我的反爬蟲下爬崩了我的網(wǎng)站算你強)

這樣長時間的工作放在服務器在合適不過了,成功和出錯都讓它寫日志文件,而且我直接簡單粗暴的直接捕獲所有異常,只要出錯就在日志文件中寫入錯誤信息和錯誤出現(xiàn)時爬取的URL。如果只是這樣我還需要每天去看一下日志文件,有點麻煩。

那就讓他發(fā)郵件吧,每爬取5000個URL讓它向我發(fā)送一封郵件,內(nèi)容只需要寫入爬取的進度和日志文件就行(想知道怎么用python發(fā)郵件的直接百度即可,非常簡單)。

當我高高興興的把它放在服務器后臺運行的時候,發(fā)現(xiàn)它每隔一段時間就自己退出了。這怎么回事,我明明捕獲了所有異常,而且30萬的URL(URL是存儲在MongoDB的)并沒有爬完,這個退出間隔的時間還比較短,只爬取了不到1000的URL,百度一下發(fā)現(xiàn)是迭代mongoset.find()出現(xiàn)的問題,需要在find里加入no_cursor_timeout = True這個參數(shù),可是運行一段時間程序還是自動關閉,不過爬取的URL變成兩三千了,這是pymongo的bug嗎。

這遠遠滿足不了我的要求,突然想到可以用另一個程序來檢測這個程序是否還在運行,如果是就繼續(xù)檢測,不是則獲取進度重新運行。這個要實現(xiàn)的話,用多進程就行,具體代碼如下:

while True:i = get_i()p = Process(target=main, args=(i,))p.start()p.join()send_mail('程序已經(jīng)退出! 正在重新啟動')

因為join是阻塞函數(shù),所以程序運行到p.join()的時候就停在那里等子進程退出,如果退出就執(zhí)行下面的內(nèi)容。這樣基本就完成了服務器持續(xù)運行爬蟲了。

當然,還有另一種方法,可以用signal.signal()捕獲子進程發(fā)出的SIGCHLD信號,這個信號是子進程退出時必然會發(fā)出的信號。有興趣的可以學習一下。

現(xiàn)在發(fā)現(xiàn)原來有很多第三方工具可以管理進程,比如Supervisor就可以做到這種功能,這些工具的功能很完善,比自己寫的程序好很多。所以還是直接使用第三方工具吧。

補充:在Windows測試遇到一個坑,MongoDB占用的內(nèi)存不斷增大,不會自動釋放。唯一想到的解決方案只能每隔一段時間手動清理內(nèi)存.(搜到一個工具,Mem Reduct),自動清理內(nèi)存。不過只支持Windows。

總結(jié)

以上是生活随笔為你收集整理的Ubuntu服务器长时间运行爬虫程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。