《Python網絡爬蟲:從入門到實踐》書中7.3.1節講到,使用multiprocessing庫的第一種方法,是Process+Queue 的多進程爬蟲,還給出一個例子,發現有重大邏輯bug,經1天時間研究,將正確的代碼公佈出來,方便廣大愛好者使用、參考。
以下代碼同時統計了各個子進程爬取的頁面數量,已經在Pycharm 5.0.3上測試通過,歡迎大家評論留言,有問題我看到後會及時回覆,謝謝。
from multiprocessing import Process, Queue, cpu_count
import time
import requests
class MyProcess(Process):
def __init__(self, q,amount=0):
Process.__init__(self)
self.q = q
self.amount = amount
def run(self):
times = 0
print ("Starting " , self.pid)
while not self.q.empty():
times += 1
crawler(self.q)
self.amount = times
print ("pid爲",self.pid,"的子進程嘗試連接的頁面數量是:",self.amount)
print ("Exiting " , self.pid)
def crawler(q):
url = q.get(timeout=2)
try:
r = requests.get(url, timeout=20)
print (q.qsize(), r.status_code, url)
except Exception as e:
print (q.qsize(), url, 'Error: ', e)
# 保證當前的.p