• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-07) 64次浏览 已收录 0个评论

这篇文章主要介绍了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 heade<div style="color:transparent">来源gaodai.ma#com搞#代!码网</div>rs = {"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就好.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是python并发爬虫实用工具tomorrow实用解析的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python并发爬虫实用工具tomorrow实用解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址