背景:爬取豆瓣电影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("收集完成")

最新文章

  1. 你的USB设备还安全吗?USB的安全性已从根本上被打破!
  2. Gear VR开发
  3. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
  4. Mybatis中 sequence不能自增长
  5. cell长按出错
  6. LightOJ 1247 Matrix Game (尼姆博弈)
  7. Redis快速入门:安装、配置和操作
  8. Cocos2d-x游戏开发之计时器
  9. node 学习笔记
  10. 为Android安装BusyBox
  11. RabbitMQ 使用场景一
  12. WPF自学入门(二)WPF-XAML布局控件
  13. AI产品的商业模式
  14. CSS中的display属性(none,block,inline,inline-block,inherit)
  15. 用react编写一个可以编辑的表格
  16. 【Java并发编程】9、非阻塞同步算法与CAS(Compare and Swap)无锁算法
  17. 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序
  18. jquery-扩展
  19. .NET零基础入门10:打老鼠之数据存储
  20. java synchronized 关键字原理

热门文章

  1. Kubernetes二进制(单/多节点)部署
  2. BGP路由协议(Border Gateway Protocol)
  3. 如何将VSCode配置上传到gitee账户,简单几步教你实现
  4. 国产操作系统deepin安装与配置Node-RED环境
  5. 二叉树的基本操作(C语言版)
  6. 求解Ax=b
  7. Solution -「CEOI 2017」「洛谷 P4654」Mousetrap
  8. Solution -「UNR #5」「UOJ #671」诡异操作
  9. vue的编译作用域
  10. Linux系列——挂载Windows虚拟文件夹到Linux系统