python学习续集,之前已经学习过一部分的基础,学习了差不多15天左右吧,都是零散的学习,因为上班加班的缘故,基本上平均下来每天2小时学习时间。
在偶然情况下发现工作群里有人发出下面的疑问
突然想到python好像可以做到,就上网查了一下,涉及可以查询恶意地址信息的有以下几个网址。
一、需求解决思路
(一)、寻找可获取到恶意IP信息的网站
可获取目标数据网站:
- 360威胁情报中心
- 安恒威胁情报中心
- 绿盟威胁情报中心(NTI)
- 奇安信威胁情报中心
- VenusEye威胁情报中心
(二)、目前掌握以及项目所使用的技术分析
爬虫是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略。
项目预计需要使用的技术知识
- python基础知识
- python requests库 #向网站请求的模块,相似的还有urllib2和urllib3,requests相对于urllib模块更简洁,对于我这样的新手比较简单
- python json库 #JSON,文件存储格式,全称为JavaScript Object Notation,以对象和数组的组合来表示数据
- python xlwt、xlrd库 #excel读取和写入模块
Python爬虫步骤:
-
准备工作
通过浏览器查看分析目标网页,确认目标数据链接
-
获取数据
通过http库向目标站点发起请求,请求可以包含额外的header等信息,如果服务器能正常响应,会得到一个Response,这就是所要获取的页面内容
-
解析内容
得到的内容可能是HTML,JSON等格式,可以用页面解析库、正则表达式等进行解析
-
保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件
(三)、分析目标网站数据获取链接
1、360威胁情报中心
第一步>>以浏览器方式正常访问目标网站
夭折——未登录情况下出现验证模块 #后续深入学习后再更,(◡‿◡)目前寻找模式比较单一的网站,验证模块其实也是一种反爬技术,爬虫会增加服务器负担,所以如果你是管理员,你会讨厌爬虫的。
2、安恒威胁情报中心
… 0.0,继续夭折 #未登录情况下出现验证模块
3、绿盟威胁情报中心(NTI)、
。。。。。。,还是夭折 #未登录情况下出现验证模块
4、奇安信威胁情报中心
还是需要验证,继续夭折 #未登录情况下出现验证模块
5、VenusEye威胁情报中心
第一步>>以浏览器方式正常访问目标网站
(▽),终于,未登录情况下查询恶意IP信息的网站找到了
第二步>>使用浏览器F12抓包工具查找可获取信息的URL
从图中可知,浏览器向URL:https://www.venuseye.com.cn/ve/ip 以POST方式发送请求,携带查询参数:52.4.209.250
,图中Response Headers里的content-type表明,网站返回的是JSON数据
import requests #注入requests模块以使用该模块的函数
url = 'https://www.venuseye.com.cn/ve/ip' #请求目标链接
head = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
} #设置请求头,表明为“浏览器”的身份,绕过被识别出是Python爬虫
data = {
'target': '52.4.209.250'
} # 设置携带需查询的参数
req =requests.post(url=url, headers = head, data=data) #发起post请求,目标链接为url,头部信息为head,携带参数为data
print(req.status_code) #输出请求状态码
输入结果为200,证明请求成功!
参考:常见的错误代码及错误原因
状态码 | 说明 | 详情 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求 |
400 | 错误请求 | 服务器无法解析该请求 |
404 | 未找到 | 服务器找不到请求的网页 |
418 | 被反爬程序返回的数据 | 服务器的反爬程序识别出请求为Python爬虫 |
以上是一些Python爬数据时常见的状态码。
请求成功后,可尝试输出response结果
...#将req.status_code改为req.content.decode()
print(req.content.decode()) #content是二进制文本,decode为解码,相反的encode为编码
输出以下结果:
可以从代码再次确认response返回结果为JSON数据,查看浏览器抓包工具的的Preview可更直观的验证结果,Preview为Response的预览结果,内容是一样的,但Response显示的方式跟我们Python输出的结果是一样的
二、项目实现
经过前两步可以确认,VenusEye威胁情报中心是可以实现项目需求的目标网站,接下来就一步一步实现了,虽然python是面向对象的编程语言,但个人认为,在推敲过程中,还是以面向过程打底先,后面再形成系统的“面向对象”。
第一步,重复上述代码步骤,抓取目标URL的Response
import requests # 注入requests模块以使用该模块的函数
url = 'https://www.venuseye.com.cn/ve/ip' # 请求目标链接
headers = {