爬一个××网站上的东西,测算了一下协程的速度提升到底有多大,网站链接就不放了。。。

import requests
from bs4 import BeautifulSoup as sb
import lxml
import time url = 'http://www.××××.com/html/part/index27_'
url_list = [] start = time.time() for i in range(2,47):
print('get page '+str(i))
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'}
res = requests.get((url+str(i)+'.html'), headers)
res.encoding = 'gb2312'
soup = sb(res.text, 'lxml')
div = sb(res.text, 'lxml').find('div', class_="box list channel")
for li in div.find_all('li'):
urls = ('http://www.××××.com' + li.a.get('href'))
url_list.append(urls)
print(urls)
print(url_list)
print(time.time()-start)

爬完用时 111.7 s。

来试试协程:

  

import requests
from bs4 import BeautifulSoup as sb
import lxml
import time
from gevent import monkey
import gevent monkey.patch_all() url = 'http://www.231ka.com/html/part/index27_'
url_list = [] for i in range(2,47):
url_list.append(url+str(i)+'.html') def get(url):
print('get data from :'+url)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'}
res = requests.get(url, headers)
res.encoding = 'gb2312'
soup = sb(res.text, 'lxml')
div = sb(res.text, 'lxml').find('div', class_="box list channel")
for li in div.find_all('li'):
ur = ('http://www.231ka.com' + li.a.get('href'))
print(ur) start = time.time() task = []
for url in url_list:
task.append(gevent.spawn(get,url))
gevent.joinall(task) print(time.time()-start)

结果是: 55.6 s

也就是说在同样是单线程的情况下,采用了协程后可以使得时间缩减一半,而且仅仅是使用了python的第三方协程库实现的。

牛逼了

最新文章

  1. html5上传图片(一)一跨域上传
  2. javax.mail 发送邮件异常
  3. matplotlib画图保存
  4. explicit用法
  5. Oracle----dual
  6. 深入浅出 JavaScript 变量、作用域和内存 v 0.5
  7. NULL不能和任何字段比较和运算
  8. TypeError: not enough arguments for format string
  9. SpringMVC4 + Spring + MyBatis3
  10. java map遍历、排序,根据value获取key
  11. 【反编译系列】四、反编译so文件(IDA_Pro)
  12. Entity Framework入门教程(3)---EF中的上下文简介
  13. PHP----------PHP自身的性能优化注意事项
  14. SpringBoot之基础
  15. Junit4单元测试的基本用法
  16. php : 文件及文件夹操作(创建、删除、移动、复制)
  17. 【已解决】gradle project refresh failed:connection refused
  18. Spatial convolution
  19. editText设置最大长度
  20. jsp有哪些内置对象?作用分别是什么?(至少三个)

热门文章

  1. 2017zstu新生赛
  2. JSP文件过大无法编译
  3. python_10(模块与包)
  4. 洛谷P2770 航空路线问题(费用流)
  5. AI学习一:环境安装
  6. Data Center Manager Leveraging OpenStack
  7. Oracle错误 1053: 该服务没有响应启动或控制请求
  8. 安装 配置 IIS
  9. linux下C的建立、编译和运行 gcc (附上Windows下visual c++的用法)
  10. c++ extern