python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影
我们在之前的文章谈到了高效爬虫
在 python 中
多线程下的 GIL 锁会让多线程显得有点鸡肋
特别是在 CPU 密集型的代码下
多线程被 GIL 锁搞得效率不高
特别是对于多核的 CPU 来说
如果想要充分利用 CPU
还是用多进程吧
这样我们就可以做到并行爬取
提高了爬取的效率
那么,怎么玩多进程呢
恩
接下来就是
可以使用 multiprocessing 来实现多进程
使用起来也是很简单的
比如我们使用 Process 这个类来创建进程
from multiprocessing import Process
def f(name):
print('hello', name)
if __name__ == '__main__':
p = Process(target=f, args=('xiaoshuaib',))
p.start()
p.join()
还可以使用进程池的方式
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
还记得我们之前爬取过 250 部电影么
python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看
那会我们还不知道啥是多进程
你先去运行一下
记录一下运行时间
接着
我们对这个代码修改一下
让它具备多进程
def main(url):
html = request_douban(url)
soup = BeautifulSoup(html, 'lxml')
save_content(soup)
if __name__ == '__main__':
start = time.time()
urls = []
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for i in range(0, 10):
url = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='
urls.append(url)
pool.map(main, urls)
pool.close()
pool.join()
简单解释一下代码
在这里
我们根据电脑 CPU 的内核数量
创建相应的进程池
pool = multiprocessing.Pool(multiprocessing.cpu_count())
我们的进程数不需要大于内核数
因为进程数创建得再多反而没什么好处
通过 map 方法去执行我们的主函数
将我们获得的 url 传过去
pool.map(main, urls)
然后我们调用了进程池的 close 方法
让它不再创建进程
pool.close()
我们调用了 join 方法
pool.join()
为的是让进程池的进程执行完毕再结束
ok
你再运行一下
再记录一下运行时间
对比一下
你会发现速度翻了好几番了
当然
这取决于你电脑的 CPU
你还可以去爬取数据量大一些的数据
这样对比会更加明显一些
快去试一下吧
往期文章
python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢?
python爬虫14 | 就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼!
python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的
扫一扫
学习 Python 没烦恼
点个好看啊~~(破音)
python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影的更多相关文章
- 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数
爬取思路: url从网页上把代码搞下来bytes decode ---> utf-8 网页内容就是我的待匹配的字符串ret = re.findall(正则,待匹配的字符串), ret 是所有匹配 ...
- python爬取豆瓣top250的电影数据并存入excle
爬取网址: https://movie.douban.com/top250 一:爬取思路(新手可以看一下) : 1:定义两个函数,一个get_page函数爬取数据,一个save函数保存数据,mian中 ...
- python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看
马上就要过年啦 过年在家干啥咧 准备好被七大姑八大姨轮番「轰炸」了没? 你的内心 os 是这样的 但实际上你是这样的 应付完之后 闲暇时刻不妨看看电影 接下来咱们就来爬取豆瓣上评分最高的 250部电影 ...
- Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫
如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:P ...
- Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)
1. 爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: 2)数据提取,将web站点所获取的数据进行处理,获取所需要的数据,常使用的技 ...
- Python爬虫实例:爬取豆瓣Top250
入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...
- Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据
所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...
- 零基础爬虫----python爬取豆瓣电影top250的信息(转)
今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...
- Python爬虫入门:爬取豆瓣电影TOP250
一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...
随机推荐
- influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回
测试准备 需要将InfluxDB的源码放入 go/src/github.com/influxdata 目录 单写测试代码(write1.go): package main import ( " ...
- 杂项-JSP-Runoob:JSP 标准标签库(JSTL)
ylbtech-杂项-JSP-Runoob:JSP 标准标签库(JSTL) 1.返回顶部 1. JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通 ...
- bzoj1477 && exgcd学习笔记
exgcd 由于忘记了exgcd,这道题就没做出来... exgcd的用处是求ax+by=gcd(a,b)这样方程的解 大概是这个样子的 void ext_gcd(long long a, long ...
- MSXML2.XMLHTTP.4.0对象
一.使用步骤:1.创建XMLHTTP对象 //需MSXML4.0支持2.打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等.客户端通过Open命令打开与服务端的服务网页的连接.与 ...
- 洛谷P1387最大正方形(dp,前缀和)
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...
- Sara Cope关于text-shadow的介绍
作者:Sara Cope p { text-shadow: 1px 1px 1px #000; } 你可以通过逗号“,”应用多个文本阴影. p { text-shadow: 1px 1px 1px # ...
- HDU4340 Capturing a country DP
自己原来写的两个维度的DP有错,看了半天这个大牛的blog.http://blog.csdn.net/cyberzhg/article/details/7840922 题意:A军队和B军队要一起占领一 ...
- 深入Mysql字符集设置
作者: Laruence( ) 本文地址: http://www.laruence.com/2008/01/05/12.html 转载请注明出处 根据Chaos Wang的PPT整理而成, 在此 ...
- D3.js 力导向图(气泡+线条+箭头+文字)
<!DOCTYPE html> <meta charset="utf-8"> <style> .link { fill: none; strok ...
- unity3d 各键值对应代码
KeyCode :KeyCode是由Event.keyCode返回的.这些直接映射到键盘上的物理键. 值 对应键 Backspace 退格键 Delete Delet ...