1. import aiohttp
  2. import asyncio
  3. import async_timeout
  4. from urllib.parse import urljoin,urldefrag
  5.  
  6. root_url = 'http://python/org/' # 开始的url
  7. crawled_urls,url_hub = [], [root_url]
  8. headers = {'user-agent': 'Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.2.15 Version/10.10'}
  9.  
  10. async def get_body(url):
  11. async with aiohttp.ClientSession() as session:
  12. try:
  13. with async_timeout.timeout(10): #超时时间的设定
  14. async with session.get(url,headers=headers) as response:
  15. if response.status == 200:
  16. html = await response.text()
  17. return {'error':'','html':html,'url':url}
  18. else:
  19. return {'error':response.status,'html':'','url':url}
  20. except Exception as err:
  21. return {'error':response.status,'html':'','url':url}
  22.  
  23. async def handle_task(task_id,work_queue):
  24. while not work_queue.empty():
  25. queue_url = await work_queue.get()
  26. if not queue_url in crawled_urls:
  27.  
  28. body = await get_body(queue_url)
  29. if not body['error']:
  30. crawled_urls.append(queue_url)
  31. parse(body)
  32. else:
  33. print('{}爬取失败'.format(queue_url))
  34.  
  35. #解析返回的数据
  36. def parse(body):
  37. pass
  38.  
  39. def remove_fragment(url):
  40. pure_url, frag = urldefrag(url)
  41. return pure_url
  42.  
  43. #解析html,拼接新的url
  44. def get_urls(html):
  45. new_urls = [url.split('"')[0] for url in str(html).replace("'", '"').split('href="')[1:]]
  46. return [urljoin(root_url, remove_fragment(new_url)) for new_url in new_urls]
  47.  
  48. if __name__ == '__main__':
  49. q = asyncio.Queue() #初始化一个异步的队列
  50. [q.put_nowait(url) for url in url_hub] #从初始的url队列中遍历,把url放入到队列中
  51. loop = asyncio.get_event_loop()
  52. tasks = [handle_task(task_id, q) for task_id in range(3)] #3个并发
  53. loop.run_until_complete(asyncio.wait(tasks))
  54. loop.close()
  55. for u in crawled_urls:
  56. print(u)
  57. print('-' * 30)
  58. print(len(crawled_urls))

aiohttp的模板的更多相关文章

  1. PYTHON --WebAPP项目转载(廖雪峰) -- Day 1 -- 搭建开发环境

    Day 1 - 搭建开发环境   搭建开发环境 首先,确认系统安装的Python版本是3.5.x: $ python3 --version Python 3.5.1 然后,用pip安装开发Web Ap ...

  2. aiohttp爬虫的模板,类的形式

    import asyncio import aiohttp import async_timeout from lxml import html from timeit import default_ ...

  3. python3异步爬虫 ——aiohttp模板使用

    一.简单使用和讲解 import aiohttp import asyncio async def fetch(client): async with client.get('http://httpb ...

  4. aiohttp笔记

    目录 简介 采集模板 一批,一次性采集 动态添加任务 动态添加任务,封装成类 简介 aiohttp需要python3.5.3以及更高的版本,它不但能做客户端爬虫,也能做服务器端,利用asyncio,协 ...

  5. python web开发 框架 模板 MVC

    我是跟着廖雪峰老师学习的,对于我这样的纯小白来说,跟着他的网站学习,简直是被妈妈抱在怀里一样无忧无虑,这样的学习本来没有记录下来的必要,但是由于我的粗心大意,经常会出现一些错误,所以我决定把这些错误记 ...

  6. Jade模板引擎让你飞

    写在前面:现在jade改名成pug了 一.安装 npm install jade 二.基本使用 1.简单使用 p hello jade! 渲染后: <p>hello jade!</p ...

  7. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  8. CMS模板应用调研问卷

    截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...

  9. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

随机推荐

  1. 爬虫入门之scrapy模拟登陆(十四)

    注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或# COOKIES_ENABLE ...

  2. Linux server配置安装Java,Tomcat服务器

    系统:Ubuntu 16.04 dev_desktop 1.Java安装并配置环境变量 (1)从Java官方网站下载最新版JDK: http://www.oracle.com/technetwork/ ...

  3. Nginx性能问题答疑

    为什么Nginx的总体性能比Apache高? Nginx使用的是epoll模型和kqueue的网络I/O模型Apache使用的是传统的select模型.目前linux的高并发场景使用的都是epoll模 ...

  4. HTTP协议图--HTTP 报文首部之请求行、状态行

    1.请求行 举个栗子,下面是一个 HTTP 请求的报文: GET /index.htm HTTP/1.1 Host: sample.com 其中,下面的这行就是请求行, GET /index.htm ...

  5. 前端工程师使用 Deepin 笔记

    笔者是一枚前端开发,在学习 Linux 的时候碰到了一个问题 —— 怎么练手?因为自己电脑上面装的是 Windows 系统,所以学习 Linux 的时候没办法进行练习,而敲指令是学习 Linux 最高 ...

  6. ajax获取json形式得题目和答案 实现答题功能

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. Cloudera Manager大数据集群环境搭建

    笔者安装CDH集群是参照官方文档:https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_install_path_ ...

  8. 8、Spring Cloud-配置中心 Spring Cloud Config(待补充)

    8.1.Config Server 本地读取配置文件 Config Server 可以从本地仓库读取配置文件,也可以从远处 Git 仓库读取.   本地仓库是指将所有的配置文件统 写在 Config ...

  9. C#获取路径问题

    由于在写控制台的时候,不能获取到绝对的路径.(下面为学习内容) System.IO.Path类中有一些获取路径的方法,可以在控制台程序或者WinForm中根据相对路径来获取绝对路径 获取web物理路径 ...

  10. mvc數據遷移

    在本节中,我们将使用Entity Framework Code First 数据迁移功能将模型类的改变应用到数据库中. 默 认情况下,当我们使用Entity Framework Code First ...