基于python爬虫的github-exploitdb漏洞库监控与下载
基于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漏洞库监控与下载的更多相关文章
- 性能测试 基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程
基于Python结合InfluxDB及Grafana图表实时监控Android系统和应用进程 By: 授客 QQ:1033553122 1. 测试环境 2. 实现功能 3. 使用前提 4. ...
- 【图文详解】python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...
- python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 制作爬虫的基本步骤 顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤. 一般来说,制作一个爬虫需要分以下几个步骤: 分析需求(对,需求分析非常重要, ...
- Python爬虫之足球小将动漫(图片)下载
尽管俄罗斯世界杯的热度已经褪去,但这届世界杯还是给全世界人民留下了无数难忘的回忆,不知你的回忆里有没有日本队的身影?本次世界杯中,日本队的表现让人眼前一亮,很难想象,就是这样一只队伍,二十几年还是 ...
- python爬虫3——获取审查元素(板野友美吧图片下载)
测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0 测试网址:http://tieba.baidu.com/p/2827883128 目的是下载该 ...
- [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍
声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...
- 基于Python爬虫采集天气网实时信息
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...
- Python爬虫获取异步加载站点pexels并下载图片(Python爬虫实战3)
1. 异步加载爬虫 对于静态页面爬虫很容易获取到站点的数据内容,然而静态页面需要全量加载站点的所有数据,对于网站的访问和带宽是巨大的挑战,对于高并发和大访问访问量的站点来说,需要使用AJAX相关的技术 ...
- python 爬虫学习<将某一页的所有图片下载下来>
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...
随机推荐
- 提高Modelsim仿真速度的方法(1) -- force
假如主驱动时钟频率很高,因为要一个周期输出,仿真时间过长,仿真速度慢是自然. 但是仿真中,并不是每个驱动周期都是必要的,这时可以使用force命令把想要的信号提前制造出来. 事实上,对于使用到PLL的 ...
- 【JZOJ3347】树的难题
description analysis 比较麻烦树形\(DP\) 不过这个我还是不算很懂-- 下次要注意思考,不要怕麻烦 code #pragma GCC optimize("O3&quo ...
- 边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入
随着5G.物联网时代的到来以及云计算应用的逐渐增加,传统集中式的云计算技术已经无法满足终端侧“大连接,低时延,大带宽”的需求.结合边缘计算的概念,云计算将必然发展到下一个技术阶段,也就是将云计算的能力 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- Linux 静态IP配置
静态配置文件# vim /etc/sysconfig/network-scripts/ifcfg-不同系统不一样主要几个配置TYPE=EthernetBOOTPROTO=static/noneNAME ...
- RTNETLINK answers: File exists错误解决方法
>一.写在前面: 因为是我刚学习linux好多问题需要解决,bolg仅作为记录自己的在技术这条道路上的点点滴滴. 二.事件起因: 最近因为女友的原因消沉的好长时间,在马哥那里的课程的结束到现在已 ...
- property中ref、value、name的区别
转载: 版权声明:本文为CSDN博主「qq_36098284」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net ...
- 出现 cannot download, $GOPATH not set. For more details see: go help gopath
执行安装 sudo go get github.com/nsf/gocode 提示: cannot download, $GOPATH not set. For more details see: g ...
- SQL中distinct 和 row_number() over() 的区别及用法
1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...
- 利用animate.css和es6制作文字向上滚动的效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...