爬虫神器——异步爬虫

摘要:
主要是使用aiohttp这种异步的方式来进行爬取。

一、背景

有一个项目需要使用到爬虫,因此去Google上搜索了一下,发现除了requests,scrapy,多线程,多进程以外,还有一种方法异步爬虫。使用aiohttp+async来进行网站的爬取。

二、使用

通过以下的指令安装

# 通过指令安装aiohttp
pip install aiohttp

我们在使用aiohttp的时候,还需要注意就是需要使用async这种异步编程的方式。同时这个方法需要python3.5以上。主要是使用aiohttp这种异步的方式来进行爬取。

三、模型(不是很准确的结构图)

3.1 多线程爬虫模型

爬虫神器——异步爬虫第1张

3.2 异步爬虫模型

爬虫神器——异步爬虫第2张

四、核心代码

其实和一般的request爬虫一样,只是需要注意这里需要使用aiohttp他是异步编程的,因此需要用到async的方法

#设置爬虫的日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
logger = logging.getLogger(__name__)

df = pd.DataFrame(columns=['occupation', 'companyName', 'location', 'salary', 'date', 'education', 'experience', 'companyType', 'companySize', 'type', 'request'])


#异步HTTP请求
async deffetch(sem11, session, url):
    async with sem11:
        async with session.get(url, headers=header) as response:
            return await response.text(errors='ignore')

#处理网页
async defdownload(sem, url):
    async with aiohttp.ClientSession() as session:
        try:
            html = await fetch(sem, session, url)  #这里添加网页的解析代码
await parser(html)
        exceptException as err:
            print(err)


if __name__ == '__main__':
    #统计该爬虫的消耗时间
    print('*' * 50)
    t_start_web =time.time()
    loop =asyncio.get_event_loop()
    sem1 = asyncio.Semaphore(100)
    #第一个人 3413
    #第二个人 3413:6826
    #第三个人 6826:
    tasks = [asyncio.ensure_future(download(sem1, url)) for url in urls[:3413]]
    tasks = asyncio.gather(*tasks)
    loop.run_until_complete(tasks)
    t_end_web =time.time()
    print('网站爬取总共耗时:%s' % (t_end_web - t_start_web))

五、参考

5.1 详细介绍

http://www.ityouknow.com/python/2019/12/28/python-aiohttp-102.html

https://www.jianshu.com/p/b8010594557f

5.2 性能对比

https://www.cnblogs.com/jiyongjia/p/9803991.html

免责声明:文章转载自《爬虫神器——异步爬虫》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ribbon 超时配置kolla-ansible-----rally模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Robots.txt 协议—百度之星

题目描述 搜 索引擎是靠 Web Robot (又称 Spider )来收集互联网上浩如烟海的网页的。 Spider 就像一个旅行家一般,不知疲倦地奔波于万维网的空间,将遇到的页面收集下来供搜索引擎索引。对于一个网站的管理员来说,如果希望搜索引擎只收录自己指定的 内容,或者指定某些不希望搜索引擎访问的内容,该如何去做呢?他需要的就是 Robots Excl...

Python爬虫之selenium高级功能

Python爬虫之selenium高级功能 原文地址 表单操作 元素拖拽 页面切换 弹窗处理 表单操作 表单里面会有文本框、密码框、下拉框、登陆框等。 这些涉及与页面的交互,比如输入、删除、点击等。 前提是找到页面中的元素。 例如下面有一个表单输入框: <input type="text" name="passwd" id="passwd-id" /...

python爬虫数据解析之xpath

xpath是一门在xml文档中查找信息的语言。xpath可以用来在xml文档中对元素和属性进行遍历。 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点。 节点 首先看下面例子: <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> &l...

【转】越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用

1、已经越狱的 iPhone、iPad 设备,当通过其自带的 safari 浏览器访问 ipa 应用下载网站时,利用 itms-services 协议,可以一键安装 ipa 文件的 iOS 应用,例如: <a href="http://t.zoukankan.com/itms-services://?action=download-manifest&...

全局图片防盗链处理

概念:防盗链是指用户不经过我们的网站直接访问我们的图片 我们给他一个错误的图片处理 原理:获取当前与上一次请求的url 对其进行网站域名与端口号比较 如果相同则返回真实图片(如果从别的网站链接过来不可能返回true)否则返回错误图片 过程: 1、新建一个一般处理程序处理 2、在webconfiguration中添加httpHandlers节点信息 pu...

通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

建立.NET Core Web Api项目建立请求模型 public class UserInfo { public int Age { get; set; } public string Name { get; set; } public bool Sex { get; set; }...