网易首页 > 网易号 > 正文 申请入驻

150行超迷你爬虫tinycrawler实现-Ali0th

0
分享至

众所周知信息收集是渗透测试最先且最重要一步,而且不仅渗透,平时做的很多事情都需要用到爬虫。所以我也自己经常写爬虫脚本。这一个是去年底时写的超迷你爬虫,一方面是有需要,一方面是写着玩,于是把代码使用各种装逼型写法缩到行数最少。之后也在不断地使用中优化,目前应该不会有太大的改动,也欢迎大家提 issue。

简介

Tiny Crawler 是一个 150 行代码实现的简单爬虫,是一个 python class 文件。它能够应付日常的渗透测试工作,因为它具备多种功能。

代码的写法上,尽量让代码量少而精、通用、易用,以便于实现日常的大量爬虫需求。可以随时集成到其它工具当中。

语言: python3

行数:去掉注释约150行

对Python感兴趣的小伙伴,记得私信小编“007”领取全套Python资料哦。

执行流程

用法示例

0 最基本用法

直接两步,一步是初始化实例,一步是爬取,最后便可以通过实例中的 urls 变量看到爬取结果。默认为爬取深度为1的同源地址。

def testphp_vulnweb(): url = "http://testphp.vulnweb.com/" webcrawler = Webcrawler(url) webcrawler.crawl() urls = webcrawler.urls print(urls)

1 实现深度爬取

可以看到,爬取的是同源的地址链接,并且对每个新的地址进行爬取,直到达到设定的层级深度为止。

2 实现广度爬取

def testphp_vulnweb(): url = "https://www.acunetix.com/" webcrawler = Webcrawler(url,2) webcrawler.crawl(None,False,None,True) urls = webcrawler.urls print(urls)

可以看到,所有非同源的地址被爬取了出来。并且也是对每个新的地址进行爬取,直到达到设定的层级广度为止。

3 复杂功能

  1. 1. 代理
  2. 2. 设置cookie
  3. 3. 链接匹配
  4. 4. 设定爬取数量
  5. 5. 以正则的方式获取链接

这些不一一介绍,下面以爬取的示例展示

def testphp_vulnweb(): cookie = { 'Proxy-Connection' : 'keep-alive', 'Cache-Control' : 'max-age=0', 'Upgrade-Insecure-Requests' : '1', 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Referer' : 'https://www.google.com.hk/', 'Accept-Encoding' : 'gzip, deflate', 'Accept-Language' : 'zh-CN,zh;q=0.9' } url = "http://testphp.vulnweb.com/" webcrawler = Webcrawler(url,2,"http://127.0.0.1:8081",cookie) match = {"css":False,"php":True} # 过滤含 css 的链接,但要 php 的 webcrawler.crawl(match,True,100,None,None) # 分别意思为: # 使用match过滤,同源,最多获取 100 个链接,不找新域名,爬取 html 标签 urls = webcrawler.urls print(urls)

有时候,链接写在 js 中,而不是放在 html 的中,这个时候,就要通过正则的形式去获取。如上面的代码修改成下面的形式。

webcrawler.crawl(None,True,100,None,"regex") 复制代码

结果可以看到爬取到以匹配形式获取的链接。

案例 : 目录遍历

只要引用此模块便可快速爬取目录遍历的所有链接。

from tinycrawler import Webcrawlerdef fetch(_url): webcrawler = Webcrawler(_url,5) webcrawler.crawl() print(webcrawler.urls)

TODO

因为平时还会有一些其它的需求,比如爬取时候,同一类型的相似地址爬取过多,或要根据页面内容来过滤链接等,所以本爬虫还在不断改进中。

  • 内容爬虫
  • 通过页面内容过滤链接
  • 根据页面内容匹配去重

一些装逼型的代码写法说明

为了将代码量和行数缩减到最少,脚本中包含了大量装逼型代码写法,下面罗列一些,仅供欣赏。

1、检查已经存在的url

# check for exist url source = self.urls if self.new_domain else self.website return [x for x in _urls if x not in self.urls and comp_netloc(x,source)]

装逼写法有三,使用了 x if a else b x for x in 和 加 [] 返回list。

2、循环爬取

for dp in range(1,self.depth): urls_new = self.comp(set(self.flat_list(list(map(self.url_html,urls_new))))) if len(urls_new) == 0:break if verbose : print("[result]urls_new:{0},self.urls:{1}".format(urls_new,self.urls)) self.urls.extend(urls_new)

装逼写法为这里使用 for 进行循环爬取的加载,当新地址为 0 时才退出。而新地址 urls_new使用了上面封装的 self.comp 方法进行比较提取。

小编是一名6年工作经验的Python程序员,如果你对python感兴趣,大家可以在一起学习交流Python,小编也准备了一份python学习资料,从最基础的知识、游戏、网络安全、数据挖掘、爬虫、再到网络安全的项目实战的学习资料都有整理,希望能帮助你更好的学习python。

这里是Python基地(556370268)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
泰媒:两名泰国国脚接受采访时表示最喜欢BLACKPINK

泰媒:两名泰国国脚接受采访时表示最喜欢BLACKPINK

直播吧
2024-03-28 11:18:15
中国驻加拿大使馆:中方坚决反对加拿大等个别国家无端指责和抹黑

中国驻加拿大使馆:中方坚决反对加拿大等个别国家无端指责和抹黑

参考消息
2024-03-28 11:49:16
雪肤花貌杨幂

雪肤花貌杨幂

娱乐圈酸柠檬
2024-03-28 22:13:13
贝尔:徐杰和胡明轩挡拆后总第一时间找我 球队化学反应越来越好

贝尔:徐杰和胡明轩挡拆后总第一时间找我 球队化学反应越来越好

直播吧
2024-03-28 12:53:48
奉劝各队,下赛季离哈登远点

奉劝各队,下赛季离哈登远点

宝哥精彩赛事
2024-03-29 01:01:38
闹大了!南航女教授和男学生新进展,学校回应来了,警方已介入

闹大了!南航女教授和男学生新进展,学校回应来了,警方已介入

鬼谷子思维
2024-03-28 16:50:04
为何药店门口经常写着“万艾可已到货”?资深店员道出了实情

为何药店门口经常写着“万艾可已到货”?资深店员道出了实情

荷兰豆爱健康
2024-03-26 16:42:10
闹大了!俄罗斯外交部:凯特王妃的健康状况是英国王室造假的!

闹大了!俄罗斯外交部:凯特王妃的健康状况是英国王室造假的!

娱乐小可爱蛙
2024-03-27 19:42:29
雷军官宣小米 SU7 “霞光紫”版,“车漆加入特殊配方金属粉”

雷军官宣小米 SU7 “霞光紫”版,“车漆加入特殊配方金属粉”

IT之家
2024-03-28 17:47:30
开国大将持枪回村为父报仇,百余人死在枪口下,邓公得知拍手叫好

开国大将持枪回村为父报仇,百余人死在枪口下,邓公得知拍手叫好

文史新知
2024-03-28 14:34:50
俄议员:音乐厅警卫胆小怕事,拥有数十支军用手枪,却放弃抵抗!

俄议员:音乐厅警卫胆小怕事,拥有数十支军用手枪,却放弃抵抗!

杂谈哥闲谈
2024-03-26 23:50:22
俄罗斯决战在即,和中国究竟有无关系?我与专家的对话实录

俄罗斯决战在即,和中国究竟有无关系?我与专家的对话实录

兵国大事
2024-03-27 00:10:03
突发!普京贴身侍卫叛逃西方,披露的秘密让人吃惊

突发!普京贴身侍卫叛逃西方,披露的秘密让人吃惊

探索日记
2023-04-11 22:26:15
俄“大内侍卫”叛逃西方,自称陪普京出行180次,曝光大量机密

俄“大内侍卫”叛逃西方,自称陪普京出行180次,曝光大量机密

第一军情
2023-04-08 14:43:31
现在是3月28号夜晚,突然曝出1个重要消息,或将产生重大影响?

现在是3月28号夜晚,突然曝出1个重要消息,或将产生重大影响?

股市皆大事
2024-03-28 16:25:17
TVB又巨亏了,网友说照这亏钱速度两年后TVB将消失

TVB又巨亏了,网友说照这亏钱速度两年后TVB将消失

港叔
2024-03-28 10:42:56
全线崩盘,美方封锁以失败告终!荷兰与阿斯麦将再不敢怠慢华为

全线崩盘,美方封锁以失败告终!荷兰与阿斯麦将再不敢怠慢华为

说故事的阿袭
2024-03-28 16:08:16
57岁邬君梅定居美国!穿40元短袖生活拮据,无固定居所常年住房车

57岁邬君梅定居美国!穿40元短袖生活拮据,无固定居所常年住房车

小眉小眼
2024-03-27 09:27:33
饮品喝到一半发现干燥剂!蜜雪冰城回应:已关闭涉事门店

饮品喝到一半发现干燥剂!蜜雪冰城回应:已关闭涉事门店

南方都市报
2024-03-28 20:57:15
乌克兰总统与美国众议院议长通话 呼吁美众议院在援乌问题上统一立场

乌克兰总统与美国众议院议长通话 呼吁美众议院在援乌问题上统一立场

财联社
2024-03-29 01:20:35
2024-03-29 02:12:49
小蜗牛IT
小蜗牛IT
分享程序员日常和知识点
261文章数 83关注度
往期回顾 全部

科技要闻

李斌李想何小鹏喊你买小米汽车

头条要闻

小米汽车7分钟大定破2万 网友:这价格真可以杀穿同行

头条要闻

小米汽车7分钟大定破2万 网友:这价格真可以杀穿同行

体育要闻

天空体育:沃克、斯通斯缺席今日曼城对阵阿森纳的赛前训练

娱乐要闻

莱昂纳多与25岁新女友互相投喂超恩爱

财经要闻

中国版QE要来?国内外机构观点罕见一致

汽车要闻

混动增程双模式 长安UNI-Z售11.79万起

态度原创

手机
教育
房产
健康
公开课

手机要闻

4299元,努比亚Z60 Ultra摄影师版开售丨超凡AI,大师影像

教育要闻

丰台首批拔尖创新人才培养基地校名单出炉!一文盘点北京7区基地校!

房产要闻

炸裂!新政出台,这里安居房货量近100万㎡,均价最低到6000+!

早防早筛,远离肝硬化

公开课

30岁之前,你要学会的13件事情

无障碍浏览 进入关怀版