python爬虫-使用线程池与使用协程的实例
背景:爬取豆瓣电影top250的信息
使用线程池
import re
from concurrent.futures import ThreadPoolExecutor
import requests #获取豆瓣电影top250电影名字、导演、评分、评价人数
def getDoubanRource(url):
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"}
res=requests.get(url,headers=header)
#获取页面源代码
pagesource = res.text
#预加热正则表达式对象
obj=re.compile(r'<span class="title">(?P<filmname>.*?)</span>.*?<p class="">\s*(?P<director>.*?)'
r' .*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<person>.*?)评价</span>',re.S)
reptile_res=obj.finditer(pagesource)
with open("D:\dir_ytj\\dome1.csv",mode="a") as f:
for item in reptile_res :
filmname=item.group("filmname")
director = item.group("director")
score = item.group("score")
person = item.group("person")
f.write(f"{filmname},{director},{score},{person}\n")
print(url,"收取完毕") if __name__ == '__main__':
with ThreadPoolExecutor(10) as t:
for i in range(10):
t.submit(getDoubanRource,f"https://movie.douban.com/top250?start={25*i}&filter=") print("完成全部信息收录")
使用协程
import asyncio
import sys,io
import re
from concurrent.futures import ThreadPoolExecutor
import requests
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
#获取豆瓣电影top250电影名字、导演、评分、评价人数
async def writeCsv(filmname,director,score,person):
with open("D:\dir_ytj\\dome2.csv", mode="a") as f:
f.write(f"{filmname},{director},{score},{person}\n") async def getDoubanRource(url):
header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0"}
res=requests.get(url,headers=header)
#获取页面源代码
pagesource = res.text
#预加热正则表达式对象
obj=re.compile(r'<span class="title">(?P<filmname>.*?)</span>.*?<p class="">\s*(?P<director>.*?)'
r' .*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?<span>(?P<person>.*?)评价</span>',re.S)
reptile_res=obj.finditer(pagesource)
tasks=[]
for item in reptile_res :
filmname=item.group("filmname")
director = item.group("director")
score = item.group("score")
person = item.group("person")
tasks.append(writeCsv(filmname,director,score,person)) await asyncio.wait(tasks) if __name__ == '__main__':
print("正在收集网页信息......")
for i in range(10):
asyncio.run(getDoubanRource(f"https://movie.douban.com/top250?start={25*i}&filter="))
print("收集完成")
python爬虫-使用线程池与使用协程的实例的更多相关文章
- python爬虫之线程池和进程池
一.需求 最近准备爬取某电商网站的数据,先不考虑代理.分布式,先说效率问题(当然你要是请求的太快就会被封掉,亲测,400个请求过去,服务器直接拒绝连接,心碎),步入正题.一般情况下小白的我们第一个想到 ...
- day35:线程队列&进程池和线程池&回调函数&协程
目录 1.线程队列 2.进程池和线程池 3.回调函数 4.协程:线程的具体实现 5.利用协程爬取数据 线程队列 1.线程队列的基本方法 put 存 get 取 put_nowait 存,超出了队列长度 ...
- Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet
主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import ...
- Python爬虫之线程池
详情点我跳转 关注公众号"轻松学编程"了解更多. 一.为什么要使用线程池? 对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初 ...
- python队列、线程、进程、协程
目录: 一.queue 二.线程 基本使用 线程锁 自定义线程池 生产者消费者模型(队列) 三.进程 基本使用 进程锁 进程数据共享 默认数据不共享 queues array Manager.dict ...
- python队列、线程、进程、协程(转)
原文地址: http://www.cnblogs.com/wangqiaomei/p/5682669.html 一.queue 二.线程 #基本使用 #线程锁 #自定义线程池 #生产者消费者模型(队列 ...
- python基础之线程、进程、协程
线程 线程基础知识 一个应用程序,可以多进程.也可以多线程. 一个python脚本,默认是单进程,单线程的. I/O操作(音频.视频.显卡操作),不占用CPU,所以: 对于I/O密集型操作,不会占用C ...
- python之路 线程、进程、协程、队列、python-memcache、python-redis
一.线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- import threa ...
- Python:简述 线程、进程和协程
Python线程 定义:Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...
随机推荐
- PMD的使用学习
是什么? 静态代码分析器 能找出什么问题? 可能的 bugs - 空的 try/catch/finally/switch 声明 死码 - 未使用的本地变量,参数和私有方法 次优代码 - 无用的 Str ...
- JavaWeb开发获取客户IP地址
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11737637.html 本地调试如果使用的是localhost进行访问, 则会获取到 0:0: ...
- 自定义滚动条样式-兼容IE
滚动条样式设置 html部分: 1 <div id="scroll" style="width: 500px; height: 300px; border: 2px ...
- 适用于小白:VSCode搭建Vue项目,最详细的搭建步骤哦
在vscode上搭建一个vue项目---初学总结. 1.假设Vscode.nodejs等已经安装好了. 2.全局安装vue-cli,vue-cli可以帮助我们快速构建Vue项目. 安装命令: npm ...
- js reduce累加器
reduce 是es6 新增的数组操作方法 意为累加器 使用方法如下 [1,1,1,1].reduce((total,currentValue,index)=>{ },initialValu ...
- Intellij IDEA出现java.lang.ClassNotFoundException: com.mysql.jdbc.Driver处理办法
菜单-->File-->project structure-->Modules-->Dependencies-->添加MySQL的驱动包:mysql-connector- ...
- 【数据共享】基于Landsat提取的全球河网(河宽)GDWL数据库
GRWL数据库,全称Global River Widths from Landsat Database,是由Allen, George H & Pavelsky. Tamlin M等人基于La ...
- React 也就这样 01——React 元素的创建和渲染
React 是一个用于构建用户界面的 JavaScript 库 它包括两个库:react.js 和 react-dom.js react.js:React 的核心库,提供了 React.js 的核心功 ...
- Python中类的多层继承和多重继承
- python中类的调用
1 class Computer: # 创建类,类名首字母大写 2 screen = True # 类的属性 3 4 def start(self): # 创建实例方法,不要漏了 self 5 pri ...