百度搜索出的结果中的网页链接是一个相对的跳转链接,而不是真实链接。
观察网址,可以发现链接的格式是由三个部分组成的,百度搜索链接的头+搜索结果的url加密部分+搜索者id的相关信息
以这一个网址来对三个部分进行说明
http://www.baidu/link?url=c44UXvDVd9NOUs8Y4rYIflC9L32dCWGWqG0F0Cv0-bS&wd=&eqid=e27b106a0000f1e8000000066321ab1a
百度搜索链接头:http://www.baidu/link
搜索结果加密部分:url=c44UXvDVd9NOUs8Y4rYIflC9L32dCWGWqG0F0Cv0-bS
搜索者id相关信息:wd=&eqid=e27b106a0000f1e8000000066321ab1a
最后,想要使用python将这个跳转链接转化为绝对链接,一定一定一定要把搜索者id相关信息去除(苦恼一整天的惨痛经历)
举例演示:
# 导入 requests 包
import requests
# 发送请求
response = requests.get('http://www.baidu/link?url=c44UXvDVd9NOUs8Y4rYIflC9L32dCWGWqG0F0Cv0-bS')
print(response.url)
抓取必应和百度搜索引擎中qq的子域名
# 本次实验内容主要为:收集baidu域名下的子域名,
# 收集方法为使用bing搜索引擎,采用爬手段,爬取搜索到的域名
# bing搜索引擎搜索子域名的语法为:domain:[域名]
from os import link
import requests #用于请求网页
from bs4 import BeautifulSoup #用于处理获取的到的网页源码数据
from urllib.parse import urlparse #用于处理url
#定义一个采用bing搜索的方法
def bing_search():
Subdomain = [] #定义一个空列表用于存储收集到的子域名
#定义请求头,绕过反爬机制
hearders = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.56',
'accept':'*/*',
'referer':'https://cn.bing/search?q=domain%3abaidu&qs=HS&pq=domain%3a&sc=10-7&cvid=B99CC286861647E79EF504A4D5B819F1&FORM=QBLH&sp=1',
'cookie':'MUID=15F7A3347F9B66091BBBAC017EB56733'
}
#定义请求url
url = "https://cn.bing/search?q=domain%3aqq&qs=n&sp=-1&pq=domain%3abaidu&sc=0-16&sk=&cvid=E6DAE965B2BD4FDC8DF857015E0499C1&first=9&FORM=PQRE1"
resp = requests.get(url,headers=hearders) #访问url,获取网页源码
soup = BeautifulSoup(resp.content,'html.parser') #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
job_bt = soup.find_all('h2') #find_all()查找源码中所有<h2>标签的内容
for i in job_bt:
link = i.a.get('href') #循环获取‘href’的内容
#urlparse是一个解析url的工具,scheme获取url的协议名,netloc获取url的网络位置
domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc)
if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中
pass
else:
Subdomain.append(domain)
print(domain)
#定义一个采用baidu搜索的方法
def baidu_search():
Subdomain = [] #定义一个空列表用于存储收集到的子域名
#定义请求头,绕过反爬机制
hearders = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0',
'accept':'*/*',
'referer':'https://www.baidu/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=domain%3Aqq&fenlei=256&rsv_pq=fcf1f0b200004214&rsv_t=65a8TR5Eh2big40H07J2K2gh8gYm7TiSE8I6eGLjjQXsP6EIExuQQj53xJJz&rqlang=en&rsv_dl=tb&rsv_enter=0&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_btype=i&inputT=2091&rsv_sug4=2482&rsv_sug=5',
'cookie':'BAIDUID=0AC41D5532F617BBB7A5E2D832141489'
}
#定义请求url
url = "https://www.baidu/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_4_dg&wd=site%3Aqq&oq=domain%253Aqq&rsv_pq=e27b106a0000f1e8&rsv_t=002dqSQzAkaAteFLONBdRswl99SFLUcb2JchJwkts8ykvu%2FsHXIGfnuyxrEem5al6pWj&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=10&rsv_sug1=2&rsv_sug7=100&bs=domain%3Aqq"
resp = requests.get(url,headers=hearders) #访问url,获取网页源码
soup = BeautifulSoup(resp.content,'html.parser') #创建一个BeautifulSoup对象,第一个参数是网页源码,第二个参数是Beautiful Soup 使用的 HTML 解析器,
job_bt = soup.find_all('h3') #find_all()查找源码中所有<h3>标签的内容
for i in job_bt:
link = i.a.get('href') #循环获取‘href’的内容
link = requests.get(link).url
domain = str(urlparse(link).scheme + "://" + urlparse(link).netloc)
if domain in Subdomain: #如果解析后的domain存在于Subdomain中则跳过,否则将domain存入子域名表中
pass
else:
Subdomain.append(domain)
print(domain)
bing_search()
baidu_search()
更多推荐
python百度跳转链接转化为绝对链接
发布评论