1.题目
本次实验主要考察大家的编程能力及子域名的信息收集方法,在文件夹“Lab1_code”提供了使用 Bing 搜索引擎的域名收集功能。请对该代码进行扩展,使其可支持百度搜索引擎的域名收集功能。需要实现如下功能:
a) 支持百度搜索引擎的域名提取,其中从百度搜索引擎提取的域名
需为真实域名,而非百度的域名跳转链接;
b) 可扩充其他功能,比如域名所在的标题等信息。
2.实验步骤及结果
1.在百度搜索引擎上收缩搜索 site:qq,使用网页的检查功能查头部字段,找到 Request URL,Accept,Cookie,User-Agent,referer等字段。
2.将代码中的请求头中使用到的头部字段更换为找到的以上字段。
3.提取出爬取页面的域名以及标题内容。
4.检测获取的域名是否是真实的,如果不是,则从爬取的内容中通过正则表达式获取真实域名。
5.最终爬取结果如下。获取了site:qq搜索结果的域名、网页名称、真实域名等信息。
3.完整代码
# 本次实验内容主要为:收集baidu域名下的子域名,
# 收集方法为使用bing搜索引擎,采用爬手段,爬取搜索到的域名
# bing搜索引擎搜索子域名的语法为:domain:[域名]
import requests #用于请求网页
from bs4 import BeautifulSoup #用于处理获取的到的网页源码数据
from urllib.parse import urlparse #用于处理url
import re
#定义一个采用bing搜索的方法
def baidu_search():
Subdomain = [] #定义一个空列表用于存储收集到的子域名
#定义请求头,绕过反爬机制
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.1.4031 SLBChan/103',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'referer': 'https://wappass.baidu/',
'Cookie':'BIDUPSID=AE44C5B2EBE1737A2D11F88EFF992543; PSTM=1629159880; BAIDUID=836DC437AFD55FD2ABBFB1373529BA84:FG=1; sugstore=0; BD_UPN=12314753; H_PS_PSSID=; kleck=8e806f85d57d64d478cd7e8d9bd4c8af; delPer=0; BD_CK_SAM=1; PSINO=2; BA_HECTOR=a58ka50k8ka00ka1akak2gah1iftvu91o; ZFY=M9W3yUZNmeWbKd0BTGStEH7cCi8Mv0O9mecypG7Oh4w:C; BAIDUID_BFESS=836DC437AFD55FD2ABBFB1373529BA84:FG=1; Hm_lvt_aec699bb6442ba076c8981c6dc490771=1694434689; Hm_lpvt_aec699bb6442ba076c8981c6dc490771=1694434689; BDRCVFR[30lSwWI4omf]=mbxnW11j9Dfmh7GuZR8mvqV; BDRCVFR[hiIP0dwB613]=mk3SLVN4HKm; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; H_PS_645EC=d979DOJrpb5wzSwlUNQYbW%2BU0g1ieUHqKyV6lKS1dXH%2B7sA14OS39bdp6KlmPbFlgAzxXifTE6Ib; BDSVRTM=181'
}
#定义请求url
url='https://www.baidu/s?wd=site%3Aqq&rsv_spt=1&rsv_iqid=0x9e28488c0016ff42&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=48021271_74_hao_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=15&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&prefixsug=site%253Aqq&rsp=5&inputT=5648&rsv_sug4=6877&p_tk=2132qVWjJEDlb8%2BD7rJO0hvD1L8ywRB%2B992tDsrxORuKXMueJGYbtASlKR8TC%2BfP60urwXR94zFX30a1UfP5FRkXcBHpoAKUmCipQFIGhX5jm3xalo0o8EYQ8HEXpwRg%2BDqGJBCJ%2BxE6zTo8M%2BoDyeQAjpGgzzSKklChuxTGQMfVi34%3D&p_timestamp=1694433156&p_sign=c741fe88613585a26c66c4f317e76293&p_signature=9a9337900fe08513180ec5c60aa9836b&__pc2ps_ab=2132qVWjJEDlb8%2BD7rJO0hvD1L8ywRB%2B992tDsrxORuKXMueJGYbtASlKR8TC%2BfP60urwXR94zFX30a1UfP5FRkXcBHpoAKUmCipQFIGhX5jm3xalo0o8EYQ8HEXpwRg%2BDqGJBCJ%2BxE6zTo8M%2BoDyeQAjpGgzzSKklChuxTGQMfVi34%3D|1694433156|9a9337900fe08513180ec5c60aa9836b|c741fe88613585a26c66c4f317e76293'
#访问url,获取网页源码
#找到隐藏的真实域名
# 不允许重定向
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.content,'html.parser') #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
job_bt = soup.find_all('div',class_="result") #find_all()查找源码中所有<h2>标签的内容
for i in job_bt:
#print(div)
link = i.get('mu')
name = i.a.string
#循环获取‘href’的内容
#urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置
domain = str(urlparse(link).scheme + "://" + urlparse(link)loc)
if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中
pass
else:
print(name)
Subdomain.append(domain)
print(domain)
r = requests.get(domain, headers=headers, allow_redirects=False)
print(r.status_code)
#real = r.content.replace('\r', '').replace('In','').replace('\t', '')
if r.status_code == 302: # 如果返回302,就从响应头获取真实地址
real_url = r.headers.get('Location')
else: # 否则从返回内容中用正则表达式提取出来真实地址
#real_url = re.findall("href='(.*?)'", r.text)[0]
try:
real_url = re.findall("URL='(.*?)'", r.text)[0]
except IndexError: real_url='同上'
print('real_url is:', real_url)
baidu_search()
发布者:admin,转转请注明出处:http://www.yc00.com/web/1754691910a5191839.html
评论列表(0条)