专栏名称: dwzb
目录
相关文章推荐
成都发布  ·  3月30日起,去双流机场赶飞机有变! ·  19 小时前  
成都本地宝  ·  我不打算买房,成都公积金还有什么用? ·  3 天前  
成都本地宝  ·  成都5个严重被低估的古镇/村落!全部免费! ·  昨天  
51好读  ›  专栏  ›  dwzb

多线程爬虫实现(上)

dwzb  · 掘金  ·  · 2018-05-26 14:02

正文

多线程爬虫实现(上)

本文首发于 知乎

爬虫主要运行时间消耗是请求网页时的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用的邮箱






请到「今天看啥」查看全文