使用python获取百度一下,热搜TOP数据详情

发布于:2024-10-12 ⋅ 阅读:(11) ⋅ 点赞:(0)

一、查找对应链接

# 警告:以下代码仅供学习和交流使用,严禁用于任何违法活动。  
# 本代码旨在帮助理解和学习编程概念,不得用于侵犯他人权益或违反法律法规的行为。 

1、打开百度页面 百度一下,你就知道
2、点击F12 或 右键鼠标选择下方的检查 进入 调试模式
3、选择Network 选项,点击显示全部信息 all 完成第二步后,点击左上角的刷新或快捷键 Ctrl+R 进行刷新,就会出现第三个点的信息

我们可以看到显示的信息,正是我们所需要的,证明这就是我们需要的目标链接

4、点回 Headers 看一下资源链接和请求方式,方便后续操作

可以看到,请求链接为:百度一下,你就知道 请求方式为:GET 请求状态码为 200表示成功

回到我们的IDE编辑器中,开始动手敲代码

二、编辑代码

1、导入第三方库 requests 这是一个用于请求网页链接获取对应信息的第三方库,导入前需要在终端中进行安装
pip install requests

2、向对应链接发送请求,并查看状态码,若是200 表示请求成功

这时的内容还是比较混乱的,我们需要对信息做一步清洗,提取所需要的一部分内容

3、目标url
url = "https://www.baidu.com/"
4、构造请求头,为防止服务器识别到异常请求而不返回数据,我们需要模拟浏览器发送请求
#构建请求头      模拟浏览器发送请求   否者会被检测到      返回信息就为空
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
}
5、使用正则表达式,提取热搜的内容部分 正则表达式返回的数据类型为列表
#清洗源码  提取关键信息
re_title = re.findall('"card_title": "(.*?)"',response)       #获取热搜标题
re_linkurl = re.findall('"linkurl": "(.*?)"',response)        #热搜对应链接
re_index = re.findall('"index": "(.*?)"',response)            #热搜排名
6、打印后,发现百度热搜的链接做了百分比加密,无法直接使用,需要进一步解密

from urllib.parse import unquote_plus               #导入解码库     默认链接采用了百分比编码,无法直接使用,需要进行解码
​
# 包含URL编码的字符串
encoded_url_list = re_linkurl
​
list_url = []                #创建一个列表用户存放解码后的链接
for i in encoded_url_list:      #遍历url列表
    decoded_url = unquote_plus(i)       # 使用unquote_plus函数解码URL       
    print(decoded_url)                  # 打印解码后的URL
    list_url.append(decoded_url)        #将解码后的链接放入列表中
print(len(list_url))                     #查看列表长度 信息是否完全获取

三、完整代码

'''
# 警告:以下代码仅供学习和交流使用,严禁用于任何违法活动。  
# 本代码旨在帮助理解和学习编程概念,不得用于侵犯他人权益或违反法律法规的行为。 
'''
import requests       #导入第三方请求库
import re
#目标url
url = "https://www.baidu.com/"
​
​
#构建请求头      模拟浏览器发送请求   否者会被检测到      返回信息就为空
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
}
#发送请求  获取网页源码
response = requests.get(url,headers=headers).text
​
#清洗源码  提取关键信息
re_title = re.findall('"card_title": "(.*?)"',response)       #获取热搜标题
re_linkurl = re.findall('"linkurl": "(.*?)"',response)        #热搜对应链接
re_index = re.findall('"index": "(.*?)"',response)            #热搜排名
​
print(re_index,re_title,re_linkurl)
​
from urllib.parse import unquote_plus               #导入解码库     默认链接采用了百分比编码,无法直接使用,需要进行解码
​
# 包含URL编码的字符串
encoded_url_list = re_linkurl
list_url = []                #创建一个列表用户存放解码后的链接
for i in encoded_url_list:      #遍历url列表
    print(i)
    # 使用unquote_plus函数解码URL
    decoded_url = unquote_plus(i)              
    # 打印解码后的URL
    print(decoded_url)
    list_url.append(decoded_url)        #将解码后的链接放入列表中
print(len(list_url))                     #查看列表长度 信息是否完全获取
# 警告:以下代码仅供学习和交流使用,严禁用于任何违法活动。  
# 本代码旨在帮助理解和学习编程概念,不得用于侵犯他人权益或违反法律法规的行为。