目录
1.导入所需的库
(这里导入了requests
库来发送HTTP请求,以及datetime
库来处理日期和时间(尽管在这段代码中没有实际使用它))
1.import requests
2.from datetime import datetime
2.hot_search函数的简介
search函数是一种常见的计算机编程函数,用于在给定字符串中查找特定的子串。该函数的基本功能是在一个字符串中查找另一个字符串的位置,如果找到了,则返回该子串在原始字符串中的位置,如果没有找到,则返回-1。
hot_search函数的使用方法:
- 构造请求URL:根据微博API的文档,获取热搜榜数据的URL通常是一个固定的URL,其中包含一些参数用于指定请求的参数和条件。
- 发送HTTP请求:使用
requests
库或其他HTTP库发送GET请求到请求URL,并获取响应。 - 处理响应数据:将响应的JSON数据解析为Python对象,并从中提取热搜榜数据。
- 返回结果:将提取的热搜榜数据作为函数的返回值。
3.decoding函数的简介
encoding函数是一种编码函数,通常用于将一些特定的字符或数据进行转换,以便在不同的环境中进行传输或存储。
1. 编码转换:encoding函数可以将一个字符或字符串从一种编码格式转换成另一种编码格式,这通常是为了解决不同编码格式之间的兼容性问题。
2. 数据加密:encoding函数可以将敏感数据进行加密处理,以保证数据的安全性,防止数据被非法获取或篡改。
3. 数据压缩:encoding函数可以将大量数据进行压缩处理,以减少数据传输的带宽和存储的空间。
decoding函数的使用方法:
- 调用
hot_search
函数:首先,函数调用hot_search
函数来获取微博的热搜榜数据。 - 检查数据有效性:如果
hot_search
函数返回的数据为空(即获取热搜榜失败),则打印一条错误消息并返回。 - 提取置顶搜索词:从热搜榜数据中提取置顶搜索词,并将其存储在一个变量中。
- 提取实时搜索词和标签:遍历热搜榜数据中的实时搜索词列表,提取每个搜索词的标题和标签。对于标签,根据标签的值进行判断,如果是'新'、'爆'或'沸',则保留标签;否则,将标签设置为空字符串。
- 存储搜索词和标签:将提取的搜索词和标签分别存储在两个列表中,
hot_li
用于存储搜索词,hot_label
用于存储标签。 - 返回结果:函数返回存储了搜索词和标签的两个列表。
以下是相关代码:
hot_search函数部分:
def hot_search():
url = 'https://weibo.com/ajax/side/hotSearch'
response = requests.get(url)
if response.status_code != 200:
return None
return response.json()['data']
decoding函数的部分:
def decoding(num):
data = hot_search()
if not data:
print('获取微博热搜榜失败')
return
top = (f"置顶:{data['hotgov']['word'].strip('#')}")
hot_li = []
hot_label = []
for i, rs in enumerate(data['realtime'][:num], 1):
title = rs['word']
try:
label = rs['label_name']
if label in ['新','爆','沸']:
label = label
else:
label = ''
except:
label = ''
# hot_li.append(f"{i}. {title} {label}")
hot_li.append(f"{title}")
hot_label.append(f"{label}")
return hot_li,hot_label
这个函数首先调用hot_search
函数来获取热搜榜数据。如果数据不存在(即hot_search
返回None),则打印一个错误消息并返回。
接下来,它从热搜榜数据中提取置顶的搜索词和其他实时搜索词。对于实时搜索词,它还提取了每个搜索词的标签。标签有三种可能的状态:'新'、'爆'和'沸'。
最后,它将实时搜索词及其标签分别存储在hot_li
和hot_label
列表中。这些列表在函数结束时返回。
4.主函数:main(num)
-
- 这个函数接受一个参数
num
,表示要打印的热搜数量。 - 首先,它调用
hot_search()
函数(该函数未在提供的代码中定义)来获取热搜数据。 - 如果
hot_search()
返回的数据为空(可能表示获取数据失败),则打印一条错误消息并退出函数。 - 如果数据获取成功,它首先打印出置顶的热搜词。
- 然后,它遍历实时热搜列表,最多打印
num
个热搜词。对于每个热搜词,它提取标题和标签,并按照一定格式打印出来。
- 这个函数接受一个参数
def main(num):
data = hot_search()
if not data:
print('获取微博热搜榜失败')
return
print(f"置顶:{data['hotgov']['word'].strip('#')}")
-
异常处理
- 在提取标签时使用了异常处理,以防止某些热搜词没有标签的情况。
for i, rs in enumerate(data['realtime'][:num], 1):
title = rs['word']
try:
label = rs['label_name']
if label in ['新','爆','沸']:
label = label
else:
label = ''
except:
label = ''
-
脚本入口
if __name__ == '__main__':
是Python脚本的入口点。当这个脚本被直接运行时,这一部分代码会被执行。- 在这里,
num
被硬编码为20,表示要获取并打印前20个热搜词。 - 最后,调用
main(num)
函数来执行主要逻辑。
if __name__ == '__main__':
num = 20 #获取热搜的数量
main(num)
-
输出格式
- 输出包括置顶的热搜词和实时热搜列表。实时热搜列表中的每个热搜词都有一个编号、标题和标签。
print(f"{i}. {title} {label}")