使用进程池模拟多进程爬取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()

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

原文地址:https://www.cnblogs.com/whylinux/p/9839338.html

时间: 2024-10-06 21:05:47

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

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

python是一门面向对象的语言,那么我们在写爬虫的时候自然也可以用到类的封装来实现爬虫. 一.类的使用 首先是对类的封装,可以将一些请求头写入构造函数当中(因为后面有进程池使用,所以构造函数不需要带参数,如果带上在后面的进程池中,也会报错). 二.Ajax数据处理 喜马拉雅的音乐也是采用Ajax的数据交互方式,所以需要用到urllib来构造请求的网址,因此在类的函数中需要传递一个参数,来控制访问的页面的内容. 1 data = { 2 "albumId": 3627097, 3 &q

使用Post方法模拟登陆爬取网页(转)

使用Post方法模拟登陆爬取网页 最近弄爬虫,遇到的一个问题就是如何使用post方法模拟登陆爬取网页.下面是极简版的代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; impo

python+正则+多进程爬取糗事百科图片

话不多说,直接上代码: # 需要的库 import requests import re import os from multiprocessing import Pool # 请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' } # 主函数 def get_im

基于进程池的多进程服务器通信

代码来源:游双的linux高性能服务器编程 主进程创建一个进程池,当有客户端发送请求时,主进程选择一个进程与该客户端进行通信,为了简单期间,去掉了一些信号处理代码,其中信号的用法可以参考基于多进程的网络聊天程序 服务器代码如下: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h&

xpath+多进程爬取网易云音乐热歌榜。

用到的工具,外链转换工具 网易云网站直接打开源代码里面并没有对应的歌曲信息,需要对url做处理, 查看网站源代码路径:发现把里面的#号去掉会显示所有内容, 右键打开的源代码路径:view-source:https://music.163.com/#/discover/toplist?id=3778678 去掉#号后:view-source:https://music.163.com/discover/toplist?id=3778678 资源拿到了,开始写代码: import requests

爬虫练习五:多进程爬取股市通股票数据

在上网查阅一些python爬虫文章时,看见有人分享了爬取股票的交易数据,不过实现得比较简单.这里就做个小练习,从百度股票批量爬取各股票的交易信息. 文章出处为:Python 爬虫实战(2):股票数据定向爬虫. 爬取数据:每个股票的日度交易数据 爬取来源:百度股市通 python版本:3.6.6 时间:20190115 1. 找到日度数据url 以中化国际的日K数据为例,通过分析网页,我们可以发现,日度交易数据是通过接口的形式获取的. 获取的url为:https://gupiao.baidu.co

爬虫——使用多进程爬取视频数据

以梨视频为例分析页面请求抓取网页数据.本次抓取梨视频生活分类页面下的部分视频数据,并保存到本地. 一.分析网页 打开抓取网页,查看网页代码结构,发现网页结构里面存放视频的地址并不是真正的视频地址. 进入视频详情页面查看后,可以在response中找到真正的视频地址.保存这个地址的并不是标签,而是一个变量,我们使用re来解析这个变量,提取信息. 二.代码实现 """使用多线程爬取梨视频视频数据""" import requests import r

python使用关键字爬取url

python网路爬虫 --------- 使用百度输入的关键字搜索内容然后爬取搜索内容的url 开发环境:windows7+python3.6.3 开发语言:Python 开发工具:pycharm 第三方软件包:需安装lxml4.0,如果只安装lxml会出错,要需要lxml中的etree 废话不多说,贴上代码: 爬取数据保存以TXT格式保存,等会尝试使用Excel表格跟数据库保存. 1 import requests,time 2 from lxml import etree 3 4 5 def

Python 利用 BeautifulSoup 爬取网站获取新闻流

0. 引言 介绍下 Python 用 Beautiful Soup 周期性爬取 xxx 网站获取新闻流: 图 1 项目介绍 1. 开发环境 Python: 3.6.3 BeautifulSoup:   4.2.0 , 是一个可以从HTML或XML文件中提取数据的Python库* ( BeautifulSoup 的中文官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ ) 2. 代码介绍 实现主要分为三个模块: 1. 计时