实验 - 域名信息收集工具

作业题目

本次实验主要考察大家的编程能力及子域名的信息收集方法,在文件

夹“Lab1_code”提供了使用 Bing 搜索引擎的域名收集功能。请对该

代码进行扩展,使其可支持百度搜索引擎的域名收集功能。需要实现

如下功能:

a) 支持百度搜索引擎的域名提取,其中从百度搜索引擎提取的域名

需为真实域名,而非百度的域名跳转链接;

b) 可扩充其他功能,比如域名所在的标题等信息。

实验步骤及结果

  1. 执行示例代码

执行代码,结果如下:

修改

该代码实现了用Bing搜索引擎搜集部分qq.com子域名的功能。

  1. 理解并修改示例代码

请求头

检查headers中的User-Agent字段,检测是否携带cookie和要求有referer都是常见的反爬手段,设置这样一个请求头绕过反爬机制。

所以,这部分代码不用修改。

part2

打开链接,是一个用Bing搜索domain:qq.com的网页。

搜索

用浏览器审查元素,发现子域名url就是html文件中<h2>标签下<a>标签href属性的值。

搜索2

所以,对代码进行如下修改:

在百度搜索引擎中搜索:domian:baidu.com,复制链接,将代码中变量url的值修改为该链接。

百度

发现对于百度搜素引擎来说,我们需要的结果在<h3>标签下,所以将h2改为h3。

修改结果:

啊哈

同时也可以发现,<h3>标签下的结果并不是原始链接,百度使用短链接,方便用户访问原始的网站,我们需要将短链接还原成长链接。

加入代码,执行代码,得到结果:

捕获6

可以发现,得到的结果并不多,只返回了第一页的内容。这是因为百度的搜索结果是动态加载,初始的htm响应不包含所有的结果。

写一个循环实现“翻页”,同时修改url:

黄瓜

yo

这时执行代码,有时候会爬到一些不符合url的内容产生报错:

捕获8

用正则表达式对内容过滤:

正在郑郑泽

执行代码,得到结果:

捕获9

有时运行代码时会有如下报错:

byte

将str(urlparse(link).schema和urlparse(link).netloc变为字符串再连接:

解决

可以解决。

有时也会发现,得到的结果里有并不是百度子域名的域名:

错误2

可能是因为百度在搜索时并没有完全过滤:

原因

  1. 进一步完善功能(域名所在标题)

通过在搜索引擎审查网页元素,可以观察到域名所在标题信息就是<a>标签的内容。

观察

定义一个空列表存储搜集子域名的标题:

定义

在子域名加到域名列表后搜集它的标题加入标题列表:

aaaaaaaaa

执行代码,结果:

成功

完成。

  1. 最终代码

最终1最终2最终3最终4

posted @ 2024-10-30 16:36  wajiez  阅读(36)  评论(0)    收藏  举报