本文首发于 知乎
爬虫主要运行时间消耗是请求网页时的io阻塞,所以开启多线程,让不同请求的等待同时进行,可以大大提高爬虫运行效率。
本文基于多线程(这里开启了10个线程),使用github的api,抓取fork cpython项目的所有5千多个项目信息,将数据存储到json文件中。
抓取github的这个内容,在 上一篇文章 中展示了不使用多线程的版本,这里就直接在那个的基础上进行改进。
爬虫所需技术
- requests库请求网页,获取json格式数据,解析字典提取我们要的信息,存储json文件
- 使用threading为网页请求部分设计多线程
- 使用两个队列,分别存储待抓取url和解析后的结果数据
- 拥有github账户,需要在代码中填入账号和密码
- 了解装饰器(这里只是计算运行时间,不了解也没关系)
爬虫代码如下
import requests
import time
from threading import Thread
from queue import Queue
import json
def run_time(func):
def wrapper(*args, **kw):
start = time.time()
func(*args, **kw)
end = time.time()
print('running', end-start, 's')
return wrapper
class Spider():
def __init__(self):
self.qurl = Queue()
self.data = list()
self.email = '' # 登录github用的邮箱