1. 网络爬虫的认识
网络爬虫是自动从互联网定向或不定向地采集信息地一种程序工具。网络爬虫分为很多类别,常见的有批量型网络爬虫、增量型网络爬虫(通用爬虫)、垂直网络爬虫(聚焦爬虫)。
2.网络爬虫的工作原理
通用爬虫:首先给定初始URL,爬虫会自动获取这个URL上的所有URL并将已经在爬取的地址存放在已爬取列表中。将新的URL放在队列并依次读取新的URL,依次判读是否满足所设置的停止获取的条件。
聚焦爬虫:首先定义一个文件(对要抓取目标的定义),爬取获取的初始的URL,并获得当前页面新的URL,并将已经爬取过的地址放在已爬取列表。设置过滤器将不需要的URL过滤掉,剩下的放在队列里并依次爬取,根据权重的计算判断爬取目标的先后顺序,根据设定的停止条件进行判断,若果满足,则停止。
两者总体上很相似,区别在于通用爬虫爬取的目标很广泛而聚焦爬虫则爬取特定的目标。
3.正则表达式
3.1一些定义
正则表达式:正则表达式是一种进行数据筛选的表达式。可以通过正则表达式从庞大的数据中提取出我们需要的、关注的、有价值的信息。在Python中是re模块,系统自带。
原子:原子是正则表达式的最基本的组成单位,每个正则表达式中至少要包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,常见的原子类型有:
a.普通字符作为原子。例如:abcdefg·····
b.非打印字符作为原子。例如:\n(换行符)、\t(制表符)
c.通用字符作为原子。例如:\w(字母、数字、下划线)、\W(除字母、数字、下划线)、\d(十进制数字)、\D(除十进制数字 )、\s(空白字符)、\S(除空白字符)
d.原子表作为原子。若在原子表中加符号^则表示非的意思,除了原子表中的都匹配。
e.特殊字符和元字符作为原子。元字符就是具有特殊含义的字符。如 . :匹配除换行符以外的任意一个字符。^:匹配字符串开始的位置(注意区别于原子表)。$:匹配结束位置。*:匹配前面出现1次,0次或者多次。?:匹配出现1次或者0次。+:匹配出现1次或者多次。{n}:前面这个原子恰好出现n次。[n,m]:至少出现n次,最多出现m次。[n,]:最少出现n次。| :模式选择符或。():模式单元。
3.2模式修正符
模式修正符:可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能。
I:匹配时忽略大小写
M:多行匹配
L:本地化识别匹配
U:Unicode
S:让 . 匹配包括换行
3.3贪婪模式与懒惰模式
贪婪模式:其核心就是尽可能多的匹配。
例如:
str='dkjspdjskdpsdsaff'
pat='d.*p'
rest=re.search(pat,str,re.I)
print(rest)
结果为:<re.Match object; span=(0, 11), match='dkjspdjskdp'>,会尽可能多的匹配d之后和p之前的字符。
懒惰模式:其核心就是尽可能少的匹配。
例如:
import re
string='dsdfsfdggfslsadadsffdg'
pat='d.*?f'
rst=re.search(pat,string,re.I)
print(rest)
结果为:<re.Match object; span=(0, 4), match='dsdf'>
注意:其中 ? 是懒惰模式的标识。
总结:懒惰模式相对于贪婪模式来说更加精准!
3.4正则表达式函数
正则表达式函数有re.match()、re.search()、re.compile(全局匹配函数)、re.sub()函数,正则表达式本身无任何功能,目的是为了实现匹配,而正则表达式函数则是实现具体的功能。
re.match():只能从头开始匹配,如果不是从头开始则不能匹配。只提取一个结果。
re.search():匹配信息并且查找出来。可以从任意位置开始匹配。只提取一个结果。
re.compile(全局匹配函数):把一堆数据中与匹配项匹配的所有数据提取出来。
3.5正则表达式的实际应用
匹配网站和网址:
从<a href='http://www.baidu.com'>百度</a>中提取:
string='<a href=\'http://www.baidu.com\'>百度</a>'
pat='[a-zA-Z]+://[^\s]*[.com|.cn]'
rst=re.compile(pat).findall(string)
print(rst)
#结果为:['http://www.baidu.com']
匹配电话号码:
str='dfsdfs011-254521352135sdasd545311310sdsad07770002-13541354353453sdsa'
pat='\d{4}-\d{7}|\d{3}-\d{8}'
rst=re.compile(pat).findall(str)
print(rst)
#结果为:['011-25452135', '0002-1354135']
4.简单的爬虫编写
仅仅做一个简单的爬虫,非常容易写,可以直接使用urllib模块。格式如下:
import urllib.request
data=urllib.request.urlopen('网址').read().decode('utf-8')#爬取是以文件形式,所以需要写上read()
#所有信息都已经保存到了data里面
通过这样便可以实现一个简单的爬虫。提取信息时候,如果数据类型不匹配,一般可以使用decode.('utf-8')进行转换。
网络安全学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
需要网络安全学习路线和视频教程的可以在评论区留言哦~
最后
- 如果你确实想自学的话,我可以把我自己整理收藏的这些教程分享给你,里面不仅有web安全,还有渗透测试等等内容,包含电子书、面试题、pdf文档、视频以及相关的课件笔记,我都已经学过了,都可以免费分享给大家!
给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。
黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)
结语
网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。
特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失