python grequests 库的使用记录
简介:
对于大名鼎鼎的request库相信大家都已经非常熟悉了,不过他有个不好的缺点就是阻塞性IO,在你使用request.get()获取所需要的网页时,除非这个网页下载完成,不然不能进行对新网页的获取;而cup的处理速度远比IO读写的速度快多了,为了充分利用cpu,加快网页爬取速度,这里讲介绍使用异步IO获取网页的grequests库的使用。这两个库都是 kennethreitz开发的,用法非常相似。
安装install
pip install grequests
基础用法
|
|
- 异常的处理
|
|
异步IO实际运用效果的反思:
a.原本毕设在做一个基于python的知乎用户信息特征爬虫系统的,为了加快爬取速度思考使用异步IO,主要思路: 1 对用户信息的的请求入口使用异步IO(grequests)请求多个url地址 2 每一个用户关注人又有多个分页,对分页进行异步IO请求。 原先未使用grequests库,由于阻塞IO的影响,每次只能爬取一个用户信息,再爬取每一用户第一页下的关注人url地址(实际未爬全所有该用户关注的用户);速度爬取相对较快;使用grequests后去爬取某个用户所有分页下的关注人url后,速度开始变慢,主要原因是:在爬取这个用户后,接着要全部爬完和解析所有分页的html(基本爬全所有关注的用户);比如某个用户关注上万人,系统爬取该用户下所有关注人都要耗费大把时间。所以异步IO提速还需要看实际的运用情况和环境。比如本身网络带宽限制,机器硬件限制等等都会影响到整体的速度。 b.爬取过程的问题: 虽然该系统只是爬取用户的关注人,不爬取被关注人信息。所以不存在关注和被关注的关系,当是存在 多个人关注同一个人的情况,所以如果爬取所有每个人的关注人,仍然存在爬取了很多重复性爬过的过户,特别是爬取解析分页网页(某个用户关注人特别多的情况);耗费资源时间却做很多无用功。 个人解决方法:控制爬取的分页数(实际爬去的分页数还需算法和大数据理论支撑),概率性爬取关注人的url(分页下)。存在多人关注同一人的关系便存在概率性爬取到此用户的可能。 缺点:部分概率爬取不到关注用户;爬取的用户数据不全。
grequets使用代理
12proxies = {'http': 'http://219.148.108.126:8998'}s = (grequests.get(u, proxies=proxies) for u in urls)参考