异步爬虫和多线程爬虫,python 异步多线程

  异步爬虫和多线程爬虫,python 异步多线程

  这篇文章主要介绍了大蟒异步爬虫之多线程,多线程可以为相关阻塞的操作单独开启线程或者进程,阻塞操作可以异步执行,但是无法无限制开启多线程或多进程,下面我们一起学习详细内容,需要的朋友可以参考一下

  多线程,多进程(不建议使用)优点:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作可以异步执行弊端:无法无限制开启多线程或多进程106 .原则:线程池处理的是阻塞且耗时的操作

  单线爬虫示例:

  导入时间

  def get_page(str):

  打印(正在下载:,字符串)

  时间。睡眠(2)

  打印(下载成功:,字符串)

  name_list=[aa , bb , cc , dd]

  start_time=time.time()

  对于范围内的我(len(name _ list)):

  get_page(name_list[i])

  end_time=time.time()

  打印( %d秒 %(结束时间-开始时间))

  多线程爬虫示例:

  导入时间

  # 导入线程池模块对应的类

  来自多重处理。虚拟导入池

  start_time=time.time()

  def get_page(str):

  打印(正在下载:,字符串)

  时间。睡眠(2)

  打印(下载成功:,字符串)

  name_list=[aa , bb , cc , dd]

  # 实例化一个线程池对象

  池=池(4)

  # 将列表中每一个列表元素传递给获取_页面进行处理

  pool.map(get_page,name_list)

  end_time=time.time()

  打印(结束时间-开始时间)

  案例:

  # 多线爬虫示例

  导入请求

  从什么是导入诡异又阴森的树形灯

  进口是

  来自多重处理。虚拟导入池

  标题={

  用户代理“:”Mozilla/5.0(Windows NT 10.0;Win64x64rv:80.0)壁虎/20100101火狐/80.0 ,

  内容类型 : 应用程序/json ,

  }

  # 对下述全球资源定位器(统一资源定位器)发起请求解析出视频详情页的全球资源定位器(统一资源定位器)和视频的名称

  URL= https://梨视频。 com/category _ 5

  page_text=requests.get(url=url,headers=headers).文本

  tree=etree .HTML(page_text)

  Li _ list=tree。XPath(//ul[@ id= listvodelistul ]/Li )

  URL=[]#存储所有视频的链接

  为李在李_list:

  detail _ URL= https://梨视频。com/李。XPath(./div/a/@href)[0]

  name=li.xpath( ./div/a/div[2]/text())[0] .mp4

  # 对详情页的全球资源定位器(统一资源定位器)发起请求

  detail _ page _ text=请求。get(URL=detail _ URL,headers=headers).文本

  #打印(详细信息url,名称)

  # 从详情页中解析出视频的地址(网址)

  id=re.findall(r\d ,detail_url)[0]

  # https://pearvideo.com/videoStatus.jsp?contId=1751458 MRD=0.356766768686

  详情_视频_网址=https://pearvideo.com/videoStatus.jsp?contId= id

  header1s={

  用户代理“:”Mozilla/5.0(Windows NT 10.0;Win64x64rv:80.0)壁虎/20100101火狐/80.0 ,

  内容类型 : 应用程序/json ,

  推荐人 :详细信息_url

  }

  视频文本=请求。get(URL=detail _ video _ URL,headers=header1s).json()

  #打印(视频_文本)

  vedio _ URL=vedio _ text[视频信息][视频][ srcUrl ]

  dic={

  名称 :名称,

  url:视频_url

  }

  网址。追加(DIC)

  打印(视频网址)

  极好的获取_视频_数据(驾驶员信息中心):

  url=dic[url]

  print(dic[name],正在下载.)

  data=requests.get(url=url,headers=header1s).内容

  # 持久化存储操作

  带有打开(dic[名称], wb )作为fp:

  fp。写入(数据)

  print(dic[name],下载成功)

  # 使用线程池对视频数据进行请求(较为耗时的阻塞操作)

  池=池(4)

  pool.map(获取视频数据,网址)

  pool.close()

  pool.join()

  到此这篇关于大蟒异步爬虫之多线程的文章就介绍到这了,更多相关大蟒爬虫多线程内容请搜索盛行信息技术软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行信息技术软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: