微信号:freebuf
由于项目需要抓取sebug的漏洞库内容,就利用scrapy框架简单写了个抓取sebug的爬虫,并存入数据库,mysql或mongodb,这里以mysql为例。
关于scrapy
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
一图胜千言哈:
操作步骤
1,先建立个scrapy项目,会自动生成一个目录结构
Scrapy startproject sebug
2,分析下sebug的漏洞详情页面内容,在item.py定义要抓取的数据结构
3,sebug的一个URL:http://sebug.net/vuldb/vulnerabilities?start=1 遍历start可以列出所有漏洞的列表。基于CrawkSpider定义一个爬虫类,并添加相应的爬虫规则,然后引入HtmlXPathSelector解析网页,提取所需的页面内容,存入item。
爬虫规则分析
(1)URL以/vuldb/ssvid-xxx 为后缀的网页,调用回调函数处理页面内容,提取数据
Rule(SgmlLinkExtractor(allow=('/vuldb/ssvid-(d{1,6})$',)),callback='parse_vul')
(2)URL如/vuldb/vulnerabilities?start=xxx 的自动抓取网页链接供爬虫处理
Rule(SgmlLinkExtractor(allow=('/vuldb/vulnerabilities?start=(d{1,2})$',)),follow=True)
4,编写pipelines文件,把item存入mysql。
5,在setting.py中添加pipelines:
ITEM_PIPELINES = ['sebug.pipelines.SebugPipeline']
为了防止spider被BAN掉,还可以设置访问延迟和user-agent。
DOWNLOAD_DELAY = 2
RANDOMIZE_DOWNLOAD_DELAY = True
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'
6,在mysql中创建对应的表结构。
Create table vulninfo (ssv varchar(10) not null,appdir varchar(20),title varchar(50),content mediumtext,publishdate varchar(50))charset=utf8;
7,运行爬虫
scrapy crawl sebugvul
8,运行截图
代码地址:
https://github.com/Hongxs/scrapy-sebug