《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