范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

知乎热门如何提高爬虫速度?

  作者:闲欢
  来源:Python 技术
  今天在浏览知乎时,发现一个有趣的问题:
  如何优化 Python 爬虫的速度?
  他的问题描述是:
  目前在写一个 Python 爬虫,单线程 urllib 感觉过于慢了,达不到数据量的要求(十万级页面)。求问有哪些可以提高爬取效率的方法?
  这个问题还蛮多人关注的,但是回答的人却不多。
  我今天就来尝试着回答一下这个问题。
  程序提速这个问题其实解决方案就摆在那里,要么通过并发来提高单位时间内处理的工作量,要么从程序本身去找提效点,比如爬取的数据用gzip传输、提高处理数据的速度等。
  我会分别从几种常见的并发方法去做同一件事情,从而比较处理效率。  简单版本爬虫
  我们先来一个简单的爬虫,看看单线程处理会花费多少时间?  import time import requests from datetime import datetime   def fetch(url):     r = requests.get(url)     print(r.text)  start = datetime.now()  t1 = time.time() for i in range(100):     fetch("http://httpbin.org/get")  print("requests版爬虫耗时:", time.time() - t1)  # requests版爬虫耗时:54.86306357383728
  我们用一个爬虫的测试网站,测试爬取100次,用时是54.86秒。  多线程版本爬虫
  下面我们将上面的程序改为多线程版本:  import threading import time import requests   def fetch():     r = requests.get("http://httpbin.org/get")     print(r.text)  t1 = time.time()  t_list = [] for i in range(100):     t = threading.Thread(target=fetch, args=())     t_list.append(t)     t.start()  for t in t_list:     t.join()  print("多线程版爬虫耗时:", time.time() - t1)  # 多线程版爬虫耗时:0.8038511276245117
  我们可以看到,用上多线程之后,速度提高了68倍。其实用这种方式的话,由于我们并发操作,所以跑100次跟跑一次的时间基本是一致的。这只是一个简单的例子,实际情况中我们不可能无限制地增加线程数。  多进程版本爬虫
  除了多线程之外,我们还可以使用多进程来提高爬虫速度:  import requests import time import multiprocessing from multiprocessing import Pool  MAX_WORKER_NUM = multiprocessing.cpu_count()  def fetch():     r = requests.get("http://httpbin.org/get")     print(r.text)  if __name__ == "__main__":     t1 = time.time()     p = Pool(MAX_WORKER_NUM)     for i in range(100):         p.apply_async(fetch, args=())     p.close()     p.join()      print("多进程爬虫耗时:", time.time() - t1)  多进程爬虫耗时: 7.9846765995025635
  我们可以看到多进程处理的时间是多线程的10倍,比单线程版本快7倍。  协程版本爬虫
  我们将程序改为使用 aiohttp 来实现,看看效率如何:  import aiohttp import asyncio import time   async def fetch(client):     async with client.get("http://httpbin.org/get") as resp:         assert resp.status == 200         return await resp.text()   async def main():     async with aiohttp.ClientSession() as client:         html = await fetch(client)         print(html)  loop = asyncio.get_event_loop()  tasks = [] for i in range(100):     task = loop.create_task(main())     tasks.append(task)  t1 = time.time()  loop.run_until_complete(main())  print("aiohttp版爬虫耗时:", time.time() - t1)  aiohttp版爬虫耗时: 0.6133313179016113
  我们可以看到使用这种方式实现,比单线程版本快90倍,比多线程还快。  结论
  通过上面的程序对比,我们可以看到,对于多任务爬虫来说,多线程、多进程、协程这几种方式处理效率的排序为:aiohttp > 多线程 > 多进程。因此,对于简单的爬虫任务,如果想要提高效率,可以考虑使用协程。但是同时也要注意,这里只是简单的示例,实际运用中,我们一般会用线程池、进程池、协程池去操作。
  这就是问题的答案了吗?
  对于一个严谨的程序员来说,当然不是,实际上还有一些优化的库,例如grequests,可以从请求上解决并发问题。实际的处理过程中,肯定还有其他的优化点,这里只是从最常见的几种并发方式去比较而已,应付简单爬虫还是可以的,其他的方式欢迎大家在评论区留言探讨。

新能源汽车出口暴增151,欧洲补贴政策吸引车企出海近年来,我国新能源汽车市场快速发展,也带动了一大批新能源汽车企业的崛起。很多品牌在国内站稳脚跟后,也将目光对准了国际市场。比亚迪蔚来小鹏等品牌纷纷走向了欧洲。乘用车市场信息联席会(海马汽车卖房自救,一汽彻底退出,股权划归海南控股因巨额亏损和卖房自救引发关注的海马汽车迎来新变局。7月20日晚,海马汽车发布公告,海马汽车股份有限公司收到控股子公司一汽海马汽车有限公司少数股东中国第一汽车股份有限公司通知,经批准山东神车齐鲁ec1来了,对标五菱宏光MINIEV,尺寸竟然大了一圈伴随着新能源的浪潮,电动化带动了汽车行业的新一代性能大战,但是在微型电动车方面,五菱宏光MINIEV似乎始终缺乏一个像样的对手。近日,根据官方消息显示,齐鲁新能源汽车旗下定位电动微理想汽车港股上市,月销量突破八千辆,依旧止不住首日破发紧随小鹏汽车的步伐,国产造车新势力理想汽车也于今日登陆港交所。据悉,理想汽车公司发行1亿股,定价118港元股。开盘之后,理想汽车股价迅速破发,现报116。9港元,跌0。93,市值2特斯拉比亚迪和小鹏,旗下长续航新能源汽车推荐哪款适合你?在我国于去年年底宣布降低对新能源汽车的补贴后,不少分析师都预测2021年中国新能源汽车销量将会迎来衰减。但是CPCA乘联会公布的数据却显示,2021年我国新能源汽车销量再创新高,实马斯克称特斯拉电池可100回收遭专家驳斥,电动车仍存环保隐患电动汽车究竟是否比燃油车更环保,仍然是很多车友热衷于讨论的话题。其中一点重要原因,就是动力电池的回收,是对电动汽车制造商,以及环境生态的重大挑战。此前特斯拉曾经发布锂离子电池回收计一月致两死,蔚来自动驾驶章健勇NOP不是自动驾驶,随时会退出一则讣告再次将蔚来汽车推上了舆论的风口浪尖。这封讣告表示2021年8月12日下午两点,美一好品牌管理公司意统天下餐饮管理公司上善若水投资管理公司的创始人林文钦在驾驶蔚来ES8汽车,7月国内汽车销量排名大众断崖式下跌,比亚迪新能源暴涨82。94近日,中国汽车工业协会公布了国内市场主要车企的7月份销量,前三名分别是上汽广汽和长安,比亚迪相比去年同期销量大涨82。94,且主要来自其新能源车型,成为最大赢家。具体数据上,位居第恒大真的还想造车吗?一辆车没下线,半年亏损48亿,市值下跌8成2020年,恒大集团正式宣布进军新能源汽车行业,组建了中国恒大新能源汽车有限公司。2020年8月,恒大汽车公开了六款概念车型,并预计于今年实现量产。今年2月,恒大汽车又公开了三款新为自动驾驶降温,威马创始人完全自动驾驶之前,驾驶员仍是主体近年来,多家车企和技术型企业都轰轰烈烈地投入到了自动驾驶的研发之中,搭载了L2乃至L4级自动驾驶的车型相继量产。不过,8月18日晚,威马汽车的创始人沈晖发表了一段主题为是谁误导了辅显卡疯狂涨价,华为难以兼顾,景嘉微新一代gpu性能赶上gtx1080今年的PC市场,显卡疯狂涨价,一块RTX3060Ti高端显卡需要5000元,RTX3060也要3600元左右,一块高端显卡的钱几乎可以买到一台配置不错的整机,尽管如此仍然一卡难求,
gRPC服务开发和接口测试初探Go之前写过了Grpc服务开发和接口测试初探Java,中间耽搁了一些时间,Go版本的gRPC测试开发实践才有时间学习使用。其中也是由于自己Go语言不够熟悉导致的。之前有段时间想暂时放弃汇量科技实现出海的背后亚马逊云科技都做了什么数字经济正在影响着人们生活和工作的方方面面,对于企业来说同样也如此,当前,随着全球企业数字化转型进程的加快,越来越多的企业都在寻求更加宽广的全球化发展机遇,对于中国企业来说,在近些华为最新一代折叠屏手机大家好,我是小温。近日华为推出一款新代折叠屏手机华为matexs2,作为华为的折叠屏新系列手机,那配置不言而喻绝对满满当当。华为matexs2这次的摄像也是非常厉害了,用上了徕卡四微信NFC功能你知道吗?曾记何时NFC还是高端手机的标配。现在微信也有了,我们大多数人并不是很了解。其实NFC功能很强大,对今天小编就给大家介绍一下。微信开启NFC可以用于数据读写实现便捷安全的支付,还可折叠屏幕新机华为MateXs2首销,Mate40降到冰点新价,福利来袭将于2022年5月6日正式首销华为MateXs2折叠屏在折叠屏幕的过程中,也不会出现折痕凸起的情况。将于2022年5月6日正式首销华为MateXs2折叠屏铰链外部的密封性也很好,避vivoX80系列两款机型到底有啥不同?标准版到底怎么样?一目了然根据近期多个手机评测平台公布的4月手机性能排行榜来看,vivo最新发布的影像旗舰X80系列频频亮相,而其中的标准版更是凭借力压多款高通骁龙8Gen1机型的性能,成为了万众瞩目的焦点一加Nord2T携手天玑1300,索尼IMX766持续输出,国内版不远了自从回归OPPO之后,一加的表现并不是很亮眼,自一加10Pro之后,一加再没有发布任何一款高端影像旗舰,一加Ace虽然也不错,但仅定位中端电竞旗舰,与高端影像旗舰还有一定差距。自从同为顶级旗舰!实测FindX5Pro和iPhone13Pro,夜景视频差异明显近日,一则Q1中国智能手机出货量同比下降17的热点消息上了头条热搜。打开一看,是权威机构StrategyAnalytics给出的数据。(头条热搜Q1中国智能手机出货量同比下降17)iPhone14发布会,最快会在9月6日正式亮相从以往苹果举行秋季发布会时间推算,苹果习惯在9月前两周的周二举行新品发布会,大致能够推算iPhone14发布时间会在9月6日或9月13日举行,而iPhone14预购时间习惯在周五,马斯克会成为世界第一的军火供应商么?符合逻辑的推论,马斯克有能力成为世界第一的军火供应商。因为特斯拉的无人驾驶,核心技术就是识别目标,识别出路上的其他车辆和行人,并且自动躲避。只要改几行代码,把躲避目标变为攻击特定的iPhone电池保养小技巧很多买了iPhone手机的用户都怕电池效率掉很快!又怕到官网换块电池太贵了,如果你不想要电池寿命掉很快的话,就赶紧跟我一起来学习如何保养iPhone手机的电池吧!不会的还不快快学习