网络摄像头[爬虫专题(14)]

网络摄像头

上世纪八九十年代,纽约的犯罪问题非常严重,凶杀、强奸、枪击、抢劫、贩毒等案件,每一项都高居大城市前列,纽约当时也被称为“犯罪之都”。

但是到了九十年代,纽约犯罪率却一路走低,甚至低于美国的平均犯罪率。

因为1991年,人类发明了网络摄像头。

网络摄像头这个技术,一开始是剑桥大学的科学家,他为了一边坐在实验室里工作,一边可以照顾隔壁房间在煮的咖啡。

这项发明,很快就被英国警察利用起来了,用来监控城市的犯罪死角。

未来社会,不仅政府要安装摄像头,企业、商户,甚至家庭和个人也都会安装。

摄像头会越来越多,全天候无死角的监控成为常态。

随着摄像头技术的发展,人脸识别技术也在突破。

在这种技术条件下,针对商户的抢劫会越来越少,直至消失。

现在摄像头非常便宜,小卖铺都能安装好几个,所以现在在中国,抢劫商户是尤其不划算的。

为了纪念摄像头的功劳,人们一直收藏着一部世界上最古老的摄像头,您点击URL就能看到旧金山州立大学的街景。

URL:https://www.fogcam.org/

本篇文章的主打黑客风,我们要做的事情是 网络摄像头,具体的、不是太好说。

看看成品吧:

在这里插入图片描述

在这里插入图片描述

这是我在网上找到的图片,别瞎想啊。

在这里插入图片描述
中国部署好 5G 可能需要 10 年时间(因为中国在4G建设上花了大概是7000亿元到8000亿元的建设投资,6、7年才完成建设),只要完成了部署妥当,我们自然会进入一个叫“万物互联”(简称 loT)的时代。

随着 IoT 的出现,我们就可以跟踪每个人的行为,比如要知道学生的学习效率,可以让学生通过与桌子、椅子、板凳联网来获得数据,就可以知道这个学生表现怎么样。

用在药品监管上,就可以判断药品的真假,还可以找出是哪个环节出了问题;还可以实时监管像拼多多这样的平台卖的东西是不是卖假货或是有圈套(极大程度上减少了政府执法的成本)。

再比如,对健康的跟踪。

今天任何一架商用的客机,上面有一千多个传感器,每天产生一个多 G 的数据,对里面的温度、湿度的运行监控情况是非常好的,但是我们人体内没有传感器,以至于当很多人得了癌症的时候已经是晚期了。

还有联网的马桶,通过安装多种感应器,马桶可以对人体排泄物进行分析,并输出高质量化检诊断。

如果马桶使用者患有某种疾病,马桶可以在症状显现之前,便对患者进行疾病提醒。

同时,马桶可以记录每名家庭成员的DNA信息,以便随时对可能危及生命的疾病做出预警。

人们不用改变什么生活习惯,实现互联的马桶完全可以自动完成以上工作。

突然间,马桶生产商就变成了医疗行业的重要商业合作伙伴。

嗯,真是一个好时代~

大概没有设备是不能被黑客入侵的,我们现在的电脑、手机、网络摄像头,甚至是机械警察(正在迪拜巡逻中…)都可以被黑。

在这里插入图片描述

您想啊,某天从马桶里冒出一条蛇、冲厕所的水对着人喷、救人的心脏起搏器突然爆炸了… 这些想着想着都有点恐怖吧。

但对于专业的黑客来说,实现他们并不难。

在这里插入图片描述

我想要的到底是爱,还是依赖;我对别人到底是关爱,还是可怜;我处事的姿态是平静,还是冷漠 ?

如果您身怀利器,您就需要知道, 线 \color{Salmon}{善恶只有一线之隔}

当然,我不是黑 【黑客】啊。

黑客也有好人(白帽黑客)和坏人(黑帽黑客)以及局面人(灰帽黑客),白帽负责维护网络空间的安全,主要对手是黑帽;现在安全的工程师大多是白帽黑客。


爆破摄像头

黑客们常用的通用型爬虫除了 谷歌、百度之外,还有一种是基于互联网搜索的爬虫,TA能搜索联网的网络设备。

这些设备包含了:

  • 路由器
  • 主机
  • 智能电视
  • 网络摄像头

我比较喜欢用的是 :https://fofa.so/。

首先登录一个账号,因为能看到的搜索结果分权限的。

账号:Debroon
密码:Sn5diphone6 (快速记忆:少年无端爱风流)

在这里插入图片描述
搜索 app=“Camera” ,Camera 是摄像头的意思,app = " "是一种格式,除此之外还有许多搜索方式。

在这里插入图片描述
红框里的是网站的IP地址,因为我们查的是摄像头,通常是一个网络摄像头的登录界面。
在这里插入图片描述
每种牌子的网络摄像头都有默认账户和默认密码,比如这个牌子的:

  • 账户:admin
  • 密码:admin

而后,把爬虫找到的所有 [IP] 都输入默认账号密码试一试,那些没改默认密码的就被入侵了…

在这里插入图片描述

我们还原黑客入侵部分摄像头的过程:

问:黑客就是这样捕捉摄像头的吗,好像没有技术含量诶 ?
答:这是最简单的,因为一些人安全意识不强 — 默认密码没有改;还有很多方法,有的摄像头存在漏洞,比如有些牌子的摄像头有变量覆盖导致的登录验证绕过。

问:如果我家里有一个联网的摄像头,我想进入这个摄像头里,可我不知道他的ip,该怎么办 ?
答:很简单,使用 nmap 直接扫描你那个 ip 段应该就出来了。

问:除了输入默认密码之外,有什么工具可以爆破密码吗 ??
答:BurpSuite ,也可以使用 selenium 模块(属于我们学习的范围)控制浏览器自动化来爆破。

我猜您大概能看到这些场景:健身房、办公室、卧室、乐器房、街、笼子、厨房、有狗的房间…(可以手工爆破,看看是啥情况)


开发者工具

退一步,回到搜索结果的界面。

在这里插入图片描述

看到绿框里的信息,这些有助于爬虫建立思路。

在这里插入图片描述

之前我们说 HTTP请求是比较抽象的,上图是 HTTP请求格式具体的内容。

HTTP报文大概分为三大部分:

  • 请求行
  • 请求的首部
  • 请求的正文实体

我把绿框的内容摘录了下来。

HTTP/1.1 200 OK                          		 # 版本为 HTTP 1.1 状态码 = 200,表示大吉大利
Connection: close                                 
Content-Length: 1276						     # 请求内容的长度
Accept-Ranges: bytes
Content-Type: text/html; charset=utf-8  		 # 正文格式:text 或 html(看这里就知道网页传输是用 HTML 还是 JSON,俩者的爬取方案不一样), 编码是 utf-8
Date: Sat, 12 Oct 2019 21:16:13 GMT              # 爬取时间
Last-Modified: Tue, 03 Mar 2015 08:55:12 GMT     # 上次修改时间
Server: thttpd/2.25b 29dec2003                   # 服务器信息

其中对于爬虫有用的信息是 第一行的状态码以及 Content-Type、编码 。

JSON 我们知道了,HTML 又是什么呢 ?

HTML(Hyper Text Markup Language)是用来描述网页的一种语言,也叫超文本标记语言(本文默认读者有 Web、Python基础) 。

网页都是以 HTML 输出的,我们去看看。

URL:https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi

等加载好后,在网页任意地方点击鼠标右键,而后点击“检查”。(windows快捷键ctrl+shift+i)

接着,您会看到一个新的界面——开发者工具栏:

在这里插入图片描述
点击上面的箭头,Chrome、火狐、360 、Safari 等等浏览器都有这个,但不一定是小箭头。
在这里插入图片描述

将鼠标放在HTML源代码上,您会发现,左边网页上有一些内容会被标亮。

这其实就是这行代码所描述的网页内容,TA们一左一右,相互对应。

您甚至还可以修改网页的内容,只需要鼠标放到对应的 HTML源代码上 ,再修改HTML源代码即可(和修改文档差不多,很easy)。

我第一次使用这个功能修改的是腾讯课堂的弹幕、第二次是一只螃蟹的价格…
 


爬虫思路

如果我们要实现自动化爆破,就先把这些 IP 全部爬下来吧。

第一步,计划我们需要拿到的信息:

  • IP (除此之外还有国家\城市,留为作业怎么样?)

获取数据,我们使用 requests.get( ) 就能实现。

解析数据,我们用新模块 【BeautifulSoup】来实现(HTML文本需要解析,JSON不用)。

真正需要我们关注的,是如何把有效信息,从这个网址当中给提取出来。

打开检查工具,我们在【Elements】里查看这个网页,是怎样的结构。

点击开发者工具左上角的小箭头,而后选中第一个 [IP]:
在这里插入图片描述
【Elements】那边(即网页源代码那边)就会自动标记出对应的代码。

如此,我们就定位到了 [IP] 的所在位置,<a>标签内的文本,甚至还顺带找到了详情页URL的所在位置。

如上图,<a>标签里有属性href,其值是 http://93.41.142.250。点击TA,就会跳转到此IP的登录界面:

所以到时候,我们可以去提取 <a>标签。

接着,先用 .text 方法拿到TA的文本,再使用 [‘href’] 获取到URL。

我们再看看第二个 [IP] 的位置:

在这里插入图片描述

第二个 [IP] 的位置同样是在 <a> 标签下,这里就产生了俩种爬虫思路:

  • 第一种:我们先去爬取所有 [IP] 的最小父级标签 <div class=“download_loader”>,而后针对每一个父级标签,想办法提取里面所有的[IP]。

在这里插入图片描述

  • 第二种:单独爬取每个 [IP] 的标签 <div class=“list_mod_t”> ,我们再分别提取其中的 [IP]。

在这里插入图片描述

如果您要选择困难症,这我还是能帮一下的。

第一种当做作业,给大佬您练练手,如果您能单独完成此次练习,那许多网站您都可以自己去爬了。

第二种做为本文的代码实例。
 


成品:
在这里插入图片描述
完整代码:

import requests, bs4, time

# 设置反爬
headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
        # 为狼披上羊皮

        "cookie":"Hm_lvt_9490413c5eebdadf757c2be2c816aedf=1570930295,1570961000,1571056845,1571073223; _fofapro_ars_session=90b1693313eeb7a33766f2aea348e42a; referer_url=%2F; Hm_lpvt_9490413c5eebdadf757c2be2c816aedf=1571073573"
        # 鼠标右键进入【检查】-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie]
}


for n in range(1, 43):
	# 翻页,从第 1 页到第 42 页 
    print('\n\n第', n, '页\n')
   
    url = 'https://fofa.so/result?page='+str(n)+'&qbase64=YXBwPSJDYW1lcmEi'
    
    # 获取数据(反反爬:设置请求头)
    res = requests.get(url, headers=headers)
	
    # 解析数据
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    ## res.text是网页的源代码,html.parser是调用python的内置html解释器。这样,我们就创造了一个BeautifulSoup的对象,命名为soup。
    
    each = soup.find_all('div', class_='list_mod_t')
    ## 使用find_all()方法 提取 <div> 标签下的所有 <list_mod_t> 标签

    # 提取数据
    for x in each:
    	ip = x.find('a')['href']
    	## 使用 find() 方法提取 ip,Tag['属性名']提取Tag对象中的属性值
        print(ip)

    # 爬取一页后,暂停 5 s(后台监控发现同一ip在某时间段内请求过于频繁,会限制访问)。
    time.sleep(5)

老样子我将为您一行一行的解读,理解代码背后的原理和思路。

不过再讲解之前,您得想自己想一想怎么爬取 ?再把能想到的代码都写上去,学编程不敲代码,不就是耍流氓吗!!!

 
 (留一片空白区域,您想写一写)
 
 
 
 

按照学习课时,我们应该能写到这个程度:

import requests

URL = "https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi"
res = resquests.get( URL )
# 发送 GET 方式的请求,并把返回的结果(响应)存储在 res 变量里头

print(res.text)
# 打印网页源代码

可我们要是这么去访问就被当成了游客,权限也很小只能访问第一页的 [IP]。

那这就有一个问题,服务器是怎么判断访问者是一个普通的用户(通过浏览器),还是一个爬虫呢 ?

这就要我们回到浏览器中,重新认识一个新的信息栏:请求头【Request Headers】。


神马是Request Headers

鼠标右击打开【检查】-> 【Network】-> 【刷新网页】-> 点击其中的某个文件能看到:
在这里插入图片描述
【Requests headers】存储的是浏览器的请求信息,【Response headers】存储的是服务器的响应信息。

每一个请求都会有一个【Requests Headers】,我们叫TA请求头;里面会有一些关于该请求的基本信息,如:

  • 这个请求是从什么设备什么浏览器上发出?(User-Agent参数);
  • 这个请求是从哪个页面跳转而来?(referer参数);
  • 这个请求是从什么状态(哪个账号)发出来的?(Cookie参数)。

以下是反爬经常需要设置的【请求头】参数:

User-Agent(又叫用户代理)会记录您电脑的信息和浏览器版本,如我的操作系统,是Mac X系统,使用谷歌浏览器版本是 77 ,Safair 浏览器版本是 537)。

origin(源头)和 referer(引用来源)则记录了这个请求,最初的起源是来自哪个页面。TA们的区别是 referer 会比 origin 携带的信息更多些,一般我们使用 referer 。

如果我们想告知服务器,我们不是爬虫是一个正常的浏览器,就要去修改 U s e r A g e n t \color{Salmon}{User-Agent}

倘若不修改,那么这里的默认值就会是Python,会被浏览器认出来。

【requests】默认的 U s e r A g e n t \color{Salmon}{User-Agent} 是 【python-requests/2.3.0 CPython/2.6.6 Windows/7 】,所以反爬虫工程师开始检查 U s e r A g e n t \color{Salmon}{User-Agent}

Cookie 很重要会单独讲,早期的网站是不记录用户数据的,这使得在网上经商几乎不可能,因为您不知道谁来过,买了啥,电子商务也就没办法做。

后来网景公司开发出了一种叫【cookie】的技术,可以辨别用户身份,当做数字消费记录器来使用。

于是出现了一批新公司,成为了用户网络数字行为的记录者:

  • Google 记录网站和用户的搜索行为;
  • Facebook 记录用户的身份和互动行为;
  • Amazon 收集信用卡号码和购买行为;

这些记录的用户数据,用来精准投放广告再适合不过了,而且数据越多,广告收益越好,所以这些大互联网公司,都成了囤积用户数据的大怪兽;而这一切的根源就是 【Cookie】啊。

 

如何设置Requests Headers

【requests】模块允许我们去修改【Headers】的值。

点击官方文档,搜索 “ U s e r A g e n t \color{Salmon}{User-Agent} ”,能看到:
在这里插入图片描述
只需要封装一个字典就好了。

# 设置反爬
headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
        # 为狼披上羊皮

        "cookie":"Hm_lvt_9490413c5eebdadf757c2be2c816aedf=1570930295,1570961000,1571056845,1571073223; _fofapro_ars_session=90b1693313eeb7a33766f2aea348e42a; referer_url=%2F; Hm_lpvt_9490413c5eebdadf757c2be2c816aedf=1571073573"
        # 鼠标右键进入【检查】-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie]
}

如果还要添加其TA的参数也相同,一并作为【字典】写入【headers】就好。


小饼干

其实,您对【cookie】并不陌生的,我敢打赌您一定见过。

在这里插入图片描述

比如一般当您登录一个网站,您都会在登录页面看到一个可勾选的选项“记住我”,如果您勾选了,以后您再打开这个网站就会 \color{Salmon}{自动登录} (无需账号密码),这就是【cookie】在起作用。

当然,【cookie】也是有时效性的,过期后就会失效。您应该有过这样的体验:哪怕勾选了“记住我”,但一段时间过去了,网站还是会提示您要重新登录,就是之前的【cookie】已经失效。

那我们获取数据的方式也有俩种:

  • 一种是采用爬虫模拟账号密码登录;
  • 另一种即把登录后的【Cookie】拿下来给爬虫用;

拿 Cookie 的完整过程:
第一步,先登录。

  • 账号:Debroon
  • 密码:Sn5diphone6 (少年无端爱风流)

第二步,鼠标右键进入【检查】(Ctrl+Shift+i)-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie] 。

部分步骤:

在这里插入图片描述
服务器传回来的东西就在这里。

名字 功能
status 表示请求完成状态
type 表示类型,是图片还是异步请求
Initiator 表示该请求通过什么发送
size 代表大小
waterfull 代表起止时间

您可以看到 fofa.so,选 fofa.so是因为见名知意,个人觉得里面的内容比较有价值:
在这里插入图片描述

将其中的 Cookie 值拷贝下来,有了 Cookie 不仅仅能实现自动登录,因为TA本身携带了session的编码信息,网站还能根据cookie,记录您的浏览足迹,从而知道您的偏好,只要再加以推荐算法,就可以实现给您推送定制化的内容。

比如,淘宝会根据您搜索和浏览商品的记录,给您推送符合您偏好的商品,增加您的购买率。

关于 Cookie 和 session 的话题,会在反反爬章节展开…

&nsbp;


解析数据

如果我们需要的数据是在 XHR 中,我们就要使用 JSON 模块解析。

但此次数据并没有在 XHR 中,反倒是在网页源代码里,因此需要学习一个能解析 HTML 网页源代码的模块或者包。

我们可以百度一下,最后我们决定选 BeautifulSoup(美味汤),这个名字比较文艺,也许是源于《爱丽丝梦游仙境》里一首关于 BeautifulSoup 的诗…

BeautifulSoup 几乎所有的函数和方法都是为了: \color{Salmon}{解析} \color{Salmon}{查找} \color{Salmon}{提取}

  • \color{Salmon}{解析} :读取网站的源代码;
  • \color{Salmon}{查找} :定位我们想找的元素;
  • \color{Salmon}{提取} :从元素里把我们想要的东西给拿出来;

我们可以通过 【requests】获取网页源代码,再用【BeautifulSoup】解析即可。

import requests, bs4, time

# 设置反爬
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    # 为狼披上羊皮

    "cookie": "Hm_lvt_9490413c5eebdadf757c2be2c816aedf=1570930295,1570961000,1571056845,1571073223; _fofapro_ars_session=90b1693313eeb7a33766f2aea348e42a; referer_url=%2F; Hm_lpvt_9490413c5eebdadf757c2be2c816aedf=1571073573"
    # 鼠标右键进入【检查】-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie]
}



url = 'https://fofa.so/result?page=1&qbase64=YXBwPSJDYW1lcmEi'

# 获取数据(反爬:设置请求头)
res = requests.get(url, headers=headers)


# 解析数据 
soup = bs4.BeautifulSoup(res.text, 'html.parser')
## res.text是网页的源代码,html.parser是调用python的内置html解释器。这样,我们就创造了一个BeautifulSoup的对象,命名为soup。

我们平时使用浏览器上网,是服务器发过来一个原始数据,浏览器负责解析成我们最后看到的东西。

但是在爬虫中,这件事就要由BeautifulSoup来代劳。TA需要一个解析器帮助TA来读懂数据,只有TA先读懂,才能接着听我们的指挥,要什么给什么,而 “html.parser” 就是那个解析器,而且是通用性最好的一个。

如今的网页很多是用一些脚本语言(比如JavaScript)生成的;查看网页的源代码,却不是直接可见的文本,而是运行这一段脚本后才能得到的结果。

一般网络爬虫中的解析器都是浏览器内核工程师写的,现在网页是越来越复杂了,解析难度上升了很多,可出色的浏览器内核工程师在全世界数量并不多;如果您对前端感兴趣,我觉得您可以试一下。

OK,不知道怎么办的时候可以憋个大招:

在这里插入图片描述

  • bs4.BeautifulSoup(),用于解析html
  • 网页源代码、html解释器的名字
  • find_all( ) 、 find( ) 等等方法能提取数据

现在我们主要是要了解如何提取数据:

在这里插入图片描述
第二种是单独爬取每个 [IP] 的标签 <div class=“list_mod_t”> 之后,再分别提取其中的 [IP]。

我介绍一下,用 bs4.BeautifulSoup 解析出来的对象是 T a g \color{Salmon}{Tag}

T a g \color{Salmon}{Tag} 对象的三种常用方法:

Tag.find( )、Tag.find_all( ) 提取Tag中的Tag
Tag.text 提取Tag中的文字
Tag[ ‘属性名’ ] 提取Tag中的属性的值

<div class=“list_mod_t”> 是一个父级标签(默认读者有HTML基础),有一个 class 属性,其值是 list_mod_t,我们可以使用 find_all( ) 语法提取。

方法 作用 用法 举例 说明
find( ) 提取满足要求的首个数据 find(标签,属性) soup.find(‘div’,class_=‘list_mod_t’) 只匹配第一个在
标签内的list_mod_t属性
find_all( ) 提取满足要求的所有数据 find_all(标签,属性) soup.find_all(‘div’,class_=‘list_mod_t’) 匹配所有在
标签内的list_mod_t属性

可以把 find_all( ) 理解为 find( ) 的复数,就像英语单词也会在末尾加个 s \color{Salmon}{s} 一样。

以下是一点点提取经验:

  • 如果提取的信息不对,一般是标签没选好,打印出不是数据的数据,换一个再试试;
  • 如果数量太多而无规律,我们会换个标签提取;
  • 如果数量不多而有规律,我们会对提取的结果进行筛选——只要列表中的若干个元素就好。

写成代码:

import requests, bs4, time

# 设置反爬
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    # 为狼披上羊皮

    "cookie": "Hm_lvt_9490413c5eebdadf757c2be2c816aedf=1570930295,1570961000,1571056845,1571073223; _fofapro_ars_session=90b1693313eeb7a33766f2aea348e42a; referer_url=%2F; Hm_lpvt_9490413c5eebdadf757c2be2c816aedf=1571073573"
    # 鼠标右键进入【检查】-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie]
}

url = 'https://fofa.so/result?page=1&qbase64=YXBwPSJDYW1lcmEi'

# 获取数据(反爬:设置请求头)
res = requests.get(url, headers=headers)


# 解析数据 
soup = bs4.BeautifulSoup(res.text, 'html.parser')
## res.text是网页的源代码,html.parser是调用python的内置html解释器。这样,我们就创造了一个BeautifulSoup的对象,命名为soup


# 提取数据
each = soup.find_all('div', class_='list_mod_t')
## 使用 find_all() 方法提取所有的 <list_mod_t> 标签。

# 提取数据
for x in each:
    ip = x.find('a')['href']
    ## 使用 find() 方法提取 <a> 标签里面的第一个 href 元素值
    print(ip)

浅谈URL

但这个爬虫程序只爬取了首页而已,所以再来分析一下网页链接的规律。

首页链接:https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi

点击第二页的链接:https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi#will_page

点击第三页的链接:https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi#will_page

点击最后一页的链接:https://fofa.so/result?qbase64=YXBwPSJDYW1lcmEi#will_page

在这里插入图片描述

我们测试一下,打开浏览器的无痕模式输入最后一页的链接 — 结果访问的却是第一页。

大胆假设链接地址是以 XHR 的方式发过来的…

鼠标右键进入【检查】 —> 【Network】(XHR) —> 刷新页面。

在这里插入图片描述

您看,这个文件名不就是首页的链接吗 !

进入看看吧~

在这里插入图片描述

第 7 页链接:https://fofa.so/result?page= 7 \color{Salmon}{7} &qbase64=YXBwPSJDYW1lcmEi
第 8 页链接:https://fofa.so/result?page= 8 \color{Salmon}{8} &qbase64=YXBwPSJDYW1lcmEi

我就总结了一个规律。

第 n 页链接:https://fofa.so/result?page= n \color{Salmon}{n} &qbase64=YXBwPSJDYW1lcmEi

注意第一页也满足以上这个规律,但起始页往往比较特别,有时就需要单独列出来。

for n in range(1, 43):
    # 翻页,从第 1 页到第 42 页 

    url = 'https://fofa.so/result?page=' + str(n) + '&qbase64=YXBwPSJDYW1lcmEi'
    # 第 n 页链接的写法
    
    res = requests.get(url, headers=headers)

完整的代码:

import requests, bs4, time

# 设置反爬
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    # 为狼披上羊皮

    "cookie": "Hm_lvt_9490413c5eebdadf757c2be2c816aedf=1570961000,1571056845,1571073223,1571142541; _fofapro_ars_session=ad174237ce6d93bb6dac19ef39f00330; referer_url=%2Fresult%3Fqbase64%3DYXBwPSJDYW1lcmEi; Hm_lpvt_9490413c5eebdadf757c2be2c816aedf=1571148488"
    # 鼠标右键进入【检查】-> 【Network】-> 【刷新】-> 点击某个文件(fofa.so) ->【Requests Headers】 -> 拷贝[Cookie]
}

for n in range(1, 43):
    # 翻页,从第 1 页到第 42 页
    print('\n\n第', n, '页\n')

    url = 'https://fofa.so/result?page=' + str(n) + '&qbase64=YXBwPSJDYW1lcmEi'

    # 获取数据(反反爬:设置请求头)
    res = requests.get(url, headers=headers)

    # 解析数据
    soup = bs4.BeautifulSoup(res.text, 'html.parser')
    ## res.text是网页的源代码,html.parser是调用python的内置html解释器。这样,我们就创造了一个BeautifulSoup的对象,命名为soup。

    each = soup.find_all('div', class_='list_mod_t')
    ## 使用find_all()方法 提取 <div> 标签下的所有 <list_mod_t> 标签

    # 提取数据
    for x in each:
        ip = x.find('a')['href']
        ## 使用 find() 方法提取 ip,Tag['属性名']提取Tag对象中的属性值
        print(ip)

    # 爬取一页后,暂停 5 s
    time.sleep(5)
    ## 如果延时访问,ip就只能爬取一部分;因为fofa后台监控[ip]在某时间段内请求次数,如果次数多了就会限制访问。
    ## 具体的应对策略,也会记录再以后的反反爬技术了,还有,您将同时看到电影常常出现的一种黑客技术 --- 蛙跳技术 (Leapfrog),TA与我们的反反爬策略类似。

在这里插入图片描述

Thanks,
Have a good one~

发布了129 篇原创文章 · 获赞 324 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41739364/article/details/102530962