基于Scrapy的GitHub数据爬虫
作者:赵本本 殷旭东 王伟
来源:《电子技术与软件工程》2016年第06期
作者:赵本本 殷旭东 王伟
来源:《电子技术与软件工程》2016年第06期
摘 要作为最大的社交编程及代码托管网站,GitHub提供了丰富的数据来源。基于Python开源框架Scrapy设计实现了一个Web爬虫,能对GitHub的资源抓取和分析,并进行了结构化处理和存储,可为后续数据分析提供基础。介绍了GitHub爬虫的设计原理、算法的实现方式,对实验结果进行了分析。
【关键词】网络爬虫 数据爬取 Scrapy GitHub Python NoSQL
数据产生于各行各业,在互联网时代大数据概念提出后,人们发现自己手中的数据不再毫无用处,通过强大的技术手段,无形的数据可转化为有形资产。麦肯锡公司的报告指出数据是一种生产资料,大数据是下一个创新、竞争、生产力提高的前沿。 世界经济论坛的报告也认定大数据为新财富,价值堪比石油。GitHub是一个巨大的数据宝库,吸引了大量的开发人员与研究人员入驻。2014年的《GitHub中国开发者年度报告》指出,目前 GitHub 上的注册用户数量已经超过1000万。由于网站托管的开源项目众多,访问的流量也呈爆炸性增长。要想从数千
万程序员中快速、准确地抓取所需要的信息变得越来越困难,所以必须使用自动化工具才能较容易的抓取下来。
本文设计并实现了一个基于Scrapy框架的Web数据爬虫,从GitHub抓取大量用户数据信息,下载到本地,进行了结构化处理和存储,为之后做数据分析提供基础。
1 网络爬虫与Scrapy
所谓网络爬虫,就是抓取特定网站网页的HTML数据。网络爬虫从一个存放URL的集合开始进行爬取,首先从队列中获取一个URL并下载此网页,提取该网页中的其它URL并放入队列中。此过程将重复直至关闭。常见的网络爬虫及其爬行策略包括:
(1)广度优先爬虫,一般全网搜索引擎的网络爬虫使用广度优先的爬行策略。
(2)重新爬取已有的页面的爬虫,目的是获得数据的定期更新。
(3)聚焦爬虫,也叫定向爬虫,为很多垂直搜索引擎使用,采取特定的爬行策略来爬取特定类型的网页。本文所研究的正是这一类型的网络爬虫。例如,网页上的某个特定主题或语言、图像、MP3文件等。
Scrapy是用Python开发的一个开源的Web爬虫框架,可用于快速抓取Web站点并从页面中高效提取结构化的数据。Scrapy可广泛应用于数据挖掘、监测和自动化测试等方面,提供了多种类型爬虫的基类,如BaseSpider、SitemapSpider等。
2 基于Scrapy的Github数据爬虫的设计
2.1 Scrapy原理
Scrapy是基于Twisted异步网络库来处理通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。其工作原理为:首先从种子URL开始,调度器会传给下载器进行下载,之后会交给爬虫进行分析,根据分析结果进行不同处理。如果是需要进一步爬取的链接,这些链接会传回调度器;如果是需要保存的数据,则被送到项目管道组件进行后期处理,包括详细分析、过滤、存储等。此外,在数据流动的通道里还允许安装各种中间件,进行必要的处理。
2.2 GitHub数据爬虫
2.2.1 GitHub网页结构与数据分析
GitHub个人主页的主要信息可分为左右两块:左块为个人基本信息,右块为个人相关的项目。个人基本信息包括名字、邮箱、公司、头像等,爬取时会按照编写的爬虫规则全部保存下来,同时右块的项目信息也储存在JSON文件中。格式为:
{
“_id”:
“fullname”:
“mail”:
“username”:
“organization”:
“joined”:
“starred”:
…
}。
2.2.2 数据定义
Item是保存爬取到的数据容器,使用方法和Python字典类似。根据从GitHub网站上获取到的数据followers、fullname等对Item进行统一建模。从而在Item中定义相应的字段field。对应的item.py中的主要代码为:
import scrapy
class GithubItem(scrapy.Item):
fullname = scrapy.Field()
username = scrapy.Field()
popular_repos = scrapy.Field()
…
2.2.3 编写提取Item数据的Spider
GitHubSpider是用于GitHub网站爬取数据的类,选择从scrapy.Spider类继承。定义以下属性和方法:
(1)name属性:定义spider名字的字符串且唯一;
(2)start_urls属性:Spider在启动时从url列表开始进行爬取。第一个被获取到的页面将是其中之一,后续的URL则从初始的页面中提取;
(3)parse:是Spider的一个方法。每个初始URL完成下载后生成的Response对象将会作为唯一的参数传递给该方法。该方法解析提取Item数据以及生成需要进一步处理的URL的Request对象。
Scrapy提取数据使用Selector选择器机制,使用特定的XPath表达式来提取HTML网页中的数据。此爬虫提取GitHub用户主页中的followers数据项使用代码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论