使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据

Posted whylinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据相关的知识,希望对你有一定的参考价值。

 1 # 使用requests请求网页,爬取网页的内容
 2 
 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据
 4 
 5 import requests
 6 from multiprocessing import Pool
 7 
 8 # response = requests.get(‘http://www.baidu.com‘) # 访问网页获取网页内容,得到一个网页内容的结果对象<Response [200]>这个200是一个状态码,200表示网页正常的返回,404表示网页找不到
 9 #
10 # print(response)
11 # print(response.status_code) # 获取访问网页返回的状态码,200表示网页正常返回,404表示网页找不到。这里是200
12 # print(response.__dict__)
13 # print(response.content) # 获取网页源码
14 
15 def get_url(url):
16     ‘‘‘
17     爬取url、将url和url的源码返回
18     :param url:
19     :return:
20     ‘‘‘
21     response = requests.get(url)
22     if response.status_code == 200:     # 200表示网页成功返回了,成功访问了网页
23         return url, response.content.decode(utf-8)     # 将网页的源码获取到,因为源码是bytes类型的,所以这里解码成了str
24 
25 def call_back(args):
26     ‘‘‘
27     回调函数,接收获取get_url的返回值,处理获取到的网页数据
28     :param args: 参数不能是多个,所以想获取到多个参数,这里可以是元组的形式.接收的是get_url的返回值
29     :return:
30     ‘‘‘
31     url, content = args
32     print(url, len(content))
33 
34 if __name__ == __main__:
35     url_lst = [
36         https://www.cnblogs.com,
37         http://www.baidu.com,
38         https://www.sogou.com,
39         http://www.sohu.com
40     ]
41     pool = Pool(4)
42     for url in url_lst:
43         pool.apply_async(get_url, args=(url, ), callback=call_back)
44     pool.close()
45     pool.join()

 

  回调函数:一般应用在进程的任务有延时,而要处理的数据时间的很短时,将进程的任务和回调函数绑定起来,将任务获取到的数据返回给回调函数,由回调函数处理数据,回调函数是在主进程中得以执行的

以上是关于使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据的主要内容,如果未能解决你的问题,请参考以下文章

爬虫实例:多线程,多进程对网页的爬取

进程池与回调函数与正则表达式和re爬虫例子

多任务爬虫

Python的进程和线程——IO密集型任务

python爬虫之线程池和进程池

类+进程池的方法爬取喜马拉雅