python并发爬虫实用工具tomorrow实用解析

 更新时间:2019年09月25日 09:26:44   作者:python学习开发  
这篇文章主要介绍了python并发爬虫实用工具tomorrow实用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

tomorrow是我最近在用的一个爬虫利器,该模块属于第三方的一个模块,使用起来非常的方便,只需要用其中的threads方法作为装饰器去修饰一个普通的函数,既可以达到并发的效果,本篇将用实例来展示tomorrow的强大之处。后面将对tomorrow的实现原理做进一步的分析。

1.安装第三方包

pip install requests_html #网络请求包
pip install fake-useragent #获取useragent包
pip install tomorrow

2.普通下载方式

在这里我们用20个电影网址进行测试,并获取其标题,计算所用的时间

start=time.time()
for i in url_list:
   print(get_xpath(get_req(i),"//title//text()"))
end=time.time()
print("普通方式花费时间",end-start)

get_req是我定义的访问网络的一个方法,get_xpath是为例使用xpath表达式获取其结果,这里是获取网址的标题。20个电影网址普通方式访问的结果在8-9秒之间。

3.使用tomorrow以后

start2 = time.time()
req_list = []
for url in url_list:
  req = async_get_req(url)
  req_list.append(req)

for req in req_list:
  print(get_xpath(req, "//title//text()"))
end2 = time.time()
print("并发后花费时间", end2 - start2)

如果我们想要使用tomorrow,就要尽量减少耗时操作,访问网络并等待其回应就是一个非常耗时的工作,在这里我们需要做的是,并发的时候除了访问网络不要做其他操作,然后我们把获取的请求存一个列表,然后再去循环做其他操作,看不懂我说的没关系,直接看下面代码并尝试几次就明白了。

4.测试结果对比

来看程序的完整代码:

import time
from requests_html import HTMLSession
from fake_useragent import UserAgent as ua
from tomorrow import threads

headers = {"User-Agent": ua().Chrome}
session = HTMLSession()
url_list = ["https://movie.douban.com",
      "http://www.1905.com/",
      "http://www.mtime.com/",
      "https://www.dy2018.com/",
      "http://dytt8.net",
      "https://www.piaohua.com/",
      "http://maoyan.com",
      "https://www.xigua110.com/",
      "https://www.vmovier.com/",
      "http://movie.kankan.com/",
      "https://107cine.com/",
      "http://movie.youku.com",
      "http://film.qq.com",
      "http://film.spider.com.cn",
      "https://dianying.taobao.com/",
      "http://www.wandafilm.com/",
      "http://www.dygang.net/",
      "http://www.bale.cn/",
      "http://dianying.2345.com/",
      "http://v.x2y4.com/"]


def get_req(url, timeout=10):
  req = session.get(url, headers=headers, timeout=timeout)
  if req.status_code == 200:
    return req


@threads(5)
def async_get_req(url, timeout=10):
  req = session.get(url, headers=headers, timeout=timeout)
  if req.status_code == 200:
    return req


def get_xpath(req, xpath_str):
  return req.html.xpath(xpath_str)[0].strip().replace("\n", "")


start=time.time()
for i in url_list:
   print(get_xpath(get_req(i),"//title//text()"))
end=time.time()
print("普通方式花费时间",end-start)

start2 = time.time()
req_list = []
for url in url_list:
  req = async_get_req(url)
  req_list.append(req)

for req in req_list:
  print(get_xpath(req, "//title//text()"))
end2 = time.time()
print("并发后花费时间", end2 - start2)

运行三次上面的程序记录下每次的结果

第一次:
普通方式花费时间 7.883908271789551
并发后花费时间 2.2888755798339844
第二次:
普通方式花费时间 8.522203207015991
并发后花费时间 2.4674007892608643
第三次:
普通方式花费时间 9.062756061553955
并发后花费时间 2.8703203201293945

tomorrow使用起来很简单,在普通的函数上面加个threads装饰器即可以实现并发效果,括号中的数字是表示并发的次数,经过我的测试并不是并发次数越多越好,你需要选择一个中间点,因为还会受到网速的影响,我觉得一般并发数5-10就好.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python基础之匿名函数介绍

    python基础之匿名函数介绍

    大家好,本篇文章主要讲的是python基础之匿名函数介绍,感兴趣的同学赶快来看一看,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • python中fastapi设置查询参数可选或必选

    python中fastapi设置查询参数可选或必选

    这篇文章主要介绍了python中fastapi设置查询参数可选或必选,文围绕主题展开详细的内容介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-06-06
  • Python双向循环链表实现方法分析

    Python双向循环链表实现方法分析

    这篇文章主要介绍了Python双向循环链表,结合实例形式分析了Python双向链表的定义、遍历、添加、删除、搜索等相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • 一文带你梳理Python的中级知识

    一文带你梳理Python的中级知识

    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。本文主要带大家梳理一下Python中常用的中级知识,希望对大家有所帮助
    2023-04-04
  • selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)

    selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)

    这篇文章主要介绍了selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • 用Python展示动态规则法用以解决重叠子问题的示例

    用Python展示动态规则法用以解决重叠子问题的示例

    这篇文章主要介绍了用Python展示动态规则法用以解决重叠子问题的一个棋盘游戏的示例,动态规划常常适用于有重叠子问题和最优子结构性质的问题,且耗时间往往远少于朴素解法,需要的朋友可以参考下
    2015-04-04
  • Pycharm汉化两种方法(pycharm改为中文版)

    Pycharm汉化两种方法(pycharm改为中文版)

    PyCharm是一款流行的Python开发环境,提供了丰富的功能和工具,使得Python的开发和调试变得更加方便和高效,下面这篇文章主要给大家介绍了Pycharm汉化的两种方法,所谓汉化就是将pycharm改为中文版,需要的朋友可以参考下
    2023-06-06
  • python用selenium打开chrome浏览器保持登录方式

    python用selenium打开chrome浏览器保持登录方式

    大家好,本篇文章主要讲的是python用selenium打开chrome浏览器保持登录方式,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Python使用分布式锁的代码演示示例

    Python使用分布式锁的代码演示示例

    这篇文章主要介绍了Python使用分布式锁的代码演示,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • pytorch 可视化feature map的示例代码

    pytorch 可视化feature map的示例代码

    今天小编就为大家分享一篇pytorch 可视化feature map的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论