基于python爬虫的github-exploitdb漏洞库监控与下载

offensive.py(爬取项目历史更新内容)

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import re

import time

import urllib.request

import conf as cf

BASE_URL = 'https://github.com/offensive-security/exploitdb/releases'

DOWNLOAD_LINK_PATTERN = 'href="(.*?)zip" rel="nofollow">'

FIRST_PATTERN = r'</span><a rel="nofollow" href="(.*?)">Next.*'

PAGE_PATTERN = r'>Previous</a><a rel="nofollow" href="(.*?)">Next.*'

class MyCrawler:

def __init__(self, base_url=BASE_URL, start_page="first 1 page"):

self.base_url = base_url

self.start_page = start_page

# self.headers = apache_request_headers();

# 对首页的爬取

def first_page(self):

try:

req = urllib.request.Request(self.base_url)

html = urllib.request.urlopen(req)

doc = html.read().decode('utf8', 'ignore')

next_page = re.search(FIRST_PATTERN, doc, re.M | re.I)

print('Now working on page = {}\n'.format(self.start_page))

time.sleep(5)

self.fetch_download_link(self.base_url)

self.start_page = next_page.group(1)

# re.search(r'after = (.*?) ">Next.*', next_page.group(1), re.M | re.I).group(1)

self.base_url = next_page.group(1)

# self.fetch_download_link(next_url)

except urllib.error.HTTPError as err:

print(err.msg)

self.fetch_next_page()

# 翻页

def fetch_next_page(self):

while True:

try:

req = urllib.request.Request(self.base_url)

html = urllib.request.urlopen(req)

doc = html.read().decode('utf8', 'ignore')

next_page = re.search(PAGE_PATTERN, doc, re.M | re.I)

print('Now working on page {}\n'.format(self.start_page))

time.sleep(5)

#翻页时等待5秒

self.fetch_download_link(self.base_url)

self.start_page = next_page.group(1)

# re.search(r'after = (.*?) ">Next.*', next_page.group(1), re.M | re.I).group(1)

self.base_url = next_page.group(1)

# self.fetch_download_link(next_url)

except urllib.error.HTTPError as err:

print(err.msg)

break

# 文件下载:将下载链接存到文件中

def fetch_download_link(self, Aurl):

f = open('result.txt', 'a')

req = urllib.request.Request(Aurl)

html = urllib.request.urlopen(req)

doc = html.read().decode('utf8')

alist = list(set(re.findall(DOWNLOAD_LINK_PATTERN, doc)))

for item in alist:

url = "https://github.com/" + item + "zip"

print('Storing {}'.format(url))

f.write(url + '\n')

time.sleep(7)

f.close()

def run(self):

self.fetch_download_link()

if __name__ == '__main__':

mc = MyCrawler()

mc.first_page()

text.py(监控首页更新,并爬取)

#!/usr/bin/env python

# -*- coding:utf-8 -*

from selenium import webdriver

import re

import time

import urllib.request

import conf as cf

BASE_URL = 'https://github.com/offensive-security/exploitdb/releases'

DOWNLOAD_LINK_PATTERN = 'href="(.*?)zip" rel="nofollow">'

FIRST_PATTERN = r'</span><a rel="nofollow" href="(.*?)">Next.*'

# 监控项目首页更新

def jiankong_page():

print("star monitoring ")

req = urllib.request.Request(BASE_URL)

html = urllib.request.urlopen(req)

doc = html.read().decode('utf8', 'ignore')

next_page = re.search(FIRST_PATTERN, doc, re.M | re.I)

flag_page = next_page.group(1)

flag_list = []

# 首次抓取首页项目url

alist = list(set(re.findall(DOWNLOAD_LINK_PATTERN, doc)))

for item in alist:

url = "https://github.com/" + item + "zip"

flag_list.append(url)

# 定时扫描监控(5h/次)

while True:

try:

time.sleep(5 * 60* 60)

req = urllib.request.Request(BASE_URL)

html = urllib.request.urlopen(req)

doc = html.read().decode('utf8', 'ignore')

next_page = re.search(FIRST_PATTERN, doc, re.M | re.I)

# 判断翻页链接是否变化,来确定是否更新

if next_page.group(1) != flag_page:

print("have update")

item = re.rearch(DOWNLOAD_LINK_PATTERN, doc, re.M | re.I)

#抓取第一个匹配的 刚更新的项目url

new_url = "https://github.com/" + item.group(1) + "zip"

print("new url = " + new_url)

flag_list.append(new_url)

f = open('result.txt', 'a')

f.write(new_url + '\n')

f.close()

flag_page = next_page.group(1)

else:

print("No update")

except urllib.error.HTTPError as err:

print(err.msg)

break

if __name__ == '__main__':

jiankong_page()


介绍一下我自己吧,我是Fisher,互联网安全作者一枚,日常是分享有趣的安全技术与故事,当然也会记录学习之路的收获。对安全领域感兴趣,可以关注我的个人微信公众号:austfish。不想走丢的话,请关注【Fisher的安全日记】!(别忘了加星标哦)or 个人博客:www.austfish.cn

 

基于python爬虫的github-exploitdb漏洞库监控与下载的更多相关文章

  1. 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程

    基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程   By: 授客 QQ:1033553122     1. 测试环境 2. 实现功能 3. 使用前提 4. ...

  2. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  3. python爬虫实战——5分钟做个图片自动下载器

      python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...

  4. Python爬虫之足球小将动漫(图片)下载

      尽管俄罗斯世界杯的热度已经褪去,但这届世界杯还是给全世界人民留下了无数难忘的回忆,不知你的回忆里有没有日本队的身影?本次世界杯中,日本队的表现让人眼前一亮,很难想象,就是这样一只队伍,二十几年还是 ...

  5. python爬虫3——获取审查元素(板野友美吧图片下载)

    测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0 测试网址:http://tieba.baidu.com/p/2827883128 目的是下载该 ...

  6. [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍

    声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...

  7. 基于Python爬虫采集天气网实时信息

      相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...

  8. Python爬虫获取异步加载站点pexels并下载图片(Python爬虫实战3)

    1. 异步加载爬虫 对于静态页面爬虫很容易获取到站点的数据内容,然而静态页面需要全量加载站点的所有数据,对于网站的访问和带宽是巨大的挑战,对于高并发和大访问访问量的站点来说,需要使用AJAX相关的技术 ...

  9. python 爬虫学习<将某一页的所有图片下载下来>

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

随机推荐

  1. 2-sat——输出方案poj3683

    一篇讲的详细的博客 https://blog.csdn.net/Hawo11/article/details/74908233 缩点后为什么要建立反图? 如果是按原图处理,选择一个点之后要把所有其后续 ...

  2. 第十三章 Odoo 12开发之创建网站前端功能

    Odoo 起初是一个后台系统,但很快就有了前端界面的需求.早期基于后台界面的门户界面不够灵活并且对移动端不友好.为解决这一问题,Odoo 引入了新的网站功能,为系统添加了 CMS(Content Ma ...

  3. ElasticSearch _bulk批量处理报错The bulk request must be terminated by a newline

    在JSON数据最后回车换行,代码中可以

  4. sql自定义日期函数,返回范围内日期和星期数表。

    Create function [dbo].[FUN_GenerateTime] ( @begin_date datetime, -- 起始时间 @end_date datetime -- 结束时间 ...

  5. 模板——二分图匹配KM

    具体方法就不介绍了,详见 https://blog.csdn.net/sixdaycoder/article/details/47720471 主要讲一些注意点: 1:不直接将未匹配的y减小是因为要保 ...

  6. css 阴影设置box-shadow

    box-shadow: 1px 2px 5px 6px #888888 inset 1px: 必须,水平阴影的位置, 负值为左 2px: 必须,垂直阴影的位置, 负值为上; 5px: 可选,模糊距离; ...

  7. 物理机多磁盘u盘安装centos

    材料:一枚u盘,一块120G固态硬盘和一块500G的硬盘的华硕笔记本电脑,原系统为windows10 需求:将centos7.5系统安装到固态硬盘,原系统不要了 遇到的问题:开机后进入不了装机界面 解 ...

  8. 全栈之路-微信小程序-SKU开发(代码)

    SKU开发是小程序中最难的一部分,思路在分析中已经记录过了,这里主要看一下代码的实现,感觉老师写的代码太棒了,很优雅!主要想记录一下写代码的思路,对面向对象编程的实践. 一.代码结构的分析 1.说明几 ...

  9. 释放内存触发断点及数组、指针的NULL初始化

    Visual Studio调试时,出现“触发一个断点”内存释放出现异常 数组和对应指针的NULL初始化 数组使用之前要先对其初始化 char Outi[4] = { NULL }; char Outj ...

  10. c++类成员函数的重载和覆盖有什么区别

    1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 2.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同 ...