第1个回答 2017-11-18
代码使用了 coroutine ,但仍然是单线程在跑,没有利用到多核的优势,如果不考虑对方的反爬而只考虑效率的提高的话 可以再加上多进程试试
写了个简单的协程爬虫爬取 B 站用户信息,代码如下:
import requestsimport reimport json
import datetimeimport asynciodef get_info(uid):
url_info = "htax/member/GetInfo?mid=" #基本信息
uid = str(uid) return loop.run_in_executor(None, requests.get, url_info+uid)
async def user_info(num):
for uid in range(num, num+10):
info = await get_info(uid)
info = json.loads(info.text)["data"] try: # print(datetime.datetime.fromtimestamp(info['regtime']))
print("ok", uid)
print(info) except UnicodeEncodeError as e:
print("UnicodeEncodeError:", e) except TypeError:
print(info)
loop = asyncio.get_event_loop()try:
loop.run_until_complete(asyncio.wait([user_info(x) for x in range(1, 1000, 10)]))except Exception as e:
print("Error:", e)
爬取 1000 条需要 50 秒左右,而且带宽占用也只有 220Kbps 左右的样子,有没有什么办法提高爬取的速度? B 站用户有 3800 万左右。本回答被提问者采纳
第2个回答 2021-07-28
大数据时代,企业和个人会利用爬虫工具爬取大量数据,并利用这些数据分析一个行业的长期发展趋势、监控竞争对手等。现在很多网站都有访问限制。如果经常抓取数据,很容易被禁止访问。那么,如何提高python爬虫的效率呢?
1、设置http代理
使用高质量http代理切换不同的IP进行爬取信息,绕过防爬机制,提高爬虫效率。
2、优化抓取策略
(1)、尽量减少发送的请求数。发送请求和等待响应是使用爬虫最慢的部分。如果您可以减少发送的请求数量,您的抓取工具会快得多。减少请求的常用方法:增加结果页面上的结果数量(例如从10个增加到100个);在抓取之前应用过滤器。
(2)批量上传项目到数据库。抓取缓慢的另一个原因是人们倾向于抓取他们的数据,然后立即将该数据添加到他们的数据库中。批量处理总是比逐项添加更快。
上述内容介绍提高python爬虫的效率的方法,http代理是爬虫不可或缺的工具,有了这个工具,再配上合理的抓取策略,爬虫效率肯定不会低。