type
Post
status
Published
date
Oct 31, 2023
slug
scripts/python02
summary
python脚本爬取网站子域名
tags
脚本编程
category
网络安全
icon
password
使用bing搜索,搜索baidu.com的子域名,使用python爬虫爬取关键信息
安装相关库:
pip install requests
pip install lxml
实现代码及其解释
注意:此代码不包含分页处理逻辑
使用127.0.0.1:8080的代理只是因为burpsuite好观察数据包
执行结果:

这段代码的主要目的是从给定的URL列表中提取出百度的子域名,并将它们存储在一个列表中。下面是详细的逐行解释:
import requests- 导入Python的requests库,用于发送HTTP请求。
from lxml import etree- 从lxml库导入ElementTree模块,用于解析HTML。
import re- 导入Python的正则表达式模块。
url = "https://cn.bing.com/search?pglt=41&q=domain%3Abaidu.com&cvid=33b7499764ce40b7a4de8398a5ef8852&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBBzQ4NmowajGoAgCwAgA&FORM=ANNTA1&PC=U531"- 设置要请求的URL。
hearders = {...}- 定义一个字典,包含一个"User-Agent"头部,模拟一个浏览器的请求。
proxy = {"http": "127.0.0.1:8080", "https": "127.0.0.1:8080"}- 设置HTTP和HTTPS的代理服务器地址。
html = requests.get(url, headers=hearders, proxies=proxy, verify=False).text- 使用requests库发送GET请求到指定的URL,并获取返回的HTML内容。
subdomain_list = []- 初始化一个空列表,用于存储提取到的子域名。
e = etree.HTML(html)- 使用lxml库将获取到的HTML内容解析为一个ElementTree对象。
urls = e.xpath('//*[@id="b_results"]/li/div[1]/a/div[2]/div[2]/div/cite/text()')- 使用XPath表达式从解析后的HTML中提取出所需的数据。
- 接下来的循环体是为了遍历上一步获取到的URL列表。
subdomain = re.findall("https://(.*?.baidu.com)", url)[0]- 使用正则表达式从URL中提取出子域名,并添加到subdomain_list列表中。
print(subdomain_list)- 打印存储子域名的列表。
需要注意的是,这段代码在处理异常时使用了
pass语句,这意味着如果出现异常,代码不会停止执行,而是简单地忽略异常并继续执行下一个循环迭代。在实际应用中,可能需要更详细地处理异常,以便更好地管理和恢复错误情况。脚本编写逻辑解释
- 在浏览器中进行bing搜索domain:baidu.com获取完整的url写入参数
这个写法是搜索域名的google hacker写法
- 关于是否需要cookie,referer,ua可以通过浏览器f12中的请求包慢慢试
通过burp试,全部确定后再写到代码
完成前俩步就已经获取了搜索domain:baidu.com后页面的源码
- xpath解析
浏览器自动会生成xpath,只需要懂基础的即可,一般不需要自己手动写xpath,具体是以下这样

这种使用的前提是响应内容必须于网站url一模一样,在f12网络的请求里自行查看
我在此处提取了俩个url的xpath,分别是:
//[@id="b_results"]/li[3]/div[1]/a/div[2]/div[2]/div/cite
//[@id="b_results"]/li[5]/div[1]/a/div[2]/div[2]/div/cite
所以就很简单了,xpath规则是
//[@id="b_results"]/li/div[1]/a/div[2]/div[2]/div/cite/text()
- 正则处理url提取子域名
这个自己到在线正则表达式里调吧!!!!!!