python爬蟲
用python爬蟲是一件非常使人愉快的事情,圖片、資料、小視頻一切皆可爬取,可是我們會經常發現下載圖片的時候會非常慢,難以忍受,
PS注意
注意:很多人學Python程序中會遇到各種煩惱問題,沒有人幫答疑容易放棄,為此小編建了個Python全堆疊免費答疑.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
我們都知道一個人做事必然沒有十個人做事快,那一個行程速度慢,用十個行程就好了呀,所以今天要跟大家分享一個多行程爬蟲的制作,(GIL的存在導致Python的多執行緒點有坑)
大家應該知道在多行程中,行程之間是不能相互通信的,這就有一個問題出現了!多個行程怎么知道哪些需要爬取、哪些已經被爬取了?
這就涉及到佇列了,如果需要更為穩定健壯的佇列,應該使用Celery這一類的專用訊息傳遞工具,不過為了簡便,這次我們使用MongoDB,
構建思路
好了!先來理一下思路:每個行程需要知道哪些URL爬取過了、哪些URL需要爬取!我們來給每個URL設定兩種狀態:
outstanding:等待爬取的URL
complete:爬取完成的URL
那么失敗的URL的怎么辦呢?我們在增加一種狀態:
processing:正在進行的URL
嗯!當一個所有初始的URL狀態都為outstanding;當開始爬取的時候狀態改為:processing;爬取完成狀態改為:complete;失敗的URL重置狀態為:outstanding,為了能夠處理URL行程被終止的情況、我們設定一個計時引數,當超過這個值時;我們則將狀態重置為outstanding,
接下來看代碼部分
首先我們需要一個模塊:datetime(這個模塊比內置time模塊要好使一點)
下面是佇列的代碼:
代碼1
代碼2
代碼3
好了,佇列我們做好了,下面是獲取所有頁面的代碼,
下面就是多行程+多執行緒的下載代碼了:
好啦!一個多行程多線的爬蟲就完成了,(其實可以設定一下MongoDB,然后調整一下連接配置,在多臺機器上跑哦!!嗯,就是超級簡化版的分布式爬蟲了,雖然很是簡陋,)
大家可以參考上面代碼,單獨處理圖片地址試試(就是多個行程直接下載圖片)應該八分鐘能下載100套圖~
當然還有一種加速的方法叫做“異步”!因為爬蟲大部分時間都是在等待response中!‘異步’則能讓程式在等待response的時間去做的其他事情,當然也會復雜許多,另外要注意:很多人學Python程序中會遇到各種煩惱問題,沒有人幫答疑容易放棄,為此小編建了個Python全堆疊免費答疑.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178317.html
標籤:Python
