使用scrapy爬取sebug漏洞库

微信号: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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-03-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码字搬砖

scrapy之原理

最近小二的公司,由于要获取数据但苦于没有爬虫,于是小二再次开始半路出家,经过小二的调研,最后决定用scraly来进行实现。虽然scrapy的中文资料不少,但成体...

2463
来自专栏专注研发

PageHelper分页插件及通用分页js

物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的...

4191
来自专栏信安之路

Android App漏洞学习(二)

接上一篇没写完的文章《Android App漏洞学习(一)》,下面继续剩下的几个部分。

960
来自专栏抠抠空间

scrapy之中间件

1266
来自专栏闵开慧

win7中telnet安装配置

Win 7 Telnet的启动 Telnet是系统管理员常用的远程登录和管理工具,在Windows 2000/XP/2003/Vista系统中它作为标准的...

4198
来自专栏指尖下的Android

安卓跨进程通信之Aidl教程详解(一)

进程通信肯定有传输数据和接受并返还数据,先新建两个项目,一个为AidlDemo1作为Service,另一个为AidlDemo2作为Client

2492
来自专栏小怪聊职场

爬虫课堂(十七)|Scrapy爬虫开发流程

2374
来自专栏V站

python爬虫入门:scrapy爬取书籍的一些信息

Spider类想要表达的是:如何抓取一个确定了的网站的数据。比如在start_urls里定义的去哪个链接抓取,parse()方法中定义的要抓取什么样的数据。 当...

29310
来自专栏wOw的Android小站

[Android] Service服务详解以及如何使service服务不被杀死

  服务是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切换到另一个应用程序。...

1.1K1
来自专栏Aloys的开发之路

tcpdump捕捉样例

# 下面的例子全是以抓取eth0接口为例,如果不加”-i eth0”是表示抓取所有的接口包括lo。 # 抓取到目标主机example.com的http he...

21510

扫码关注云+社区

领取腾讯云代金券