每次打开浏览器,我基本上都会看一下百度热搜榜。这篇我就写一下如何获取百度的热搜榜信息吧。
如果到最后看的云里雾里的,请先看我写的上一篇《Python 爬虫之简单的爬虫(一)》https://blog.csdn.net/weixin_57061292/article/details/135038581
主要是以下几部分(下文基本会按照这个步骤来写):
代码如下:
# 将这个编码后的链接解码回原始的URL格式
from urllib.parse import unquote
# 用于发送 HTTP 请求
from bs4 import BeautifulSoup
# 这是一个用于解析 HTML 和 XML 文档
import requests
# 用于处理下面获取的数据
import json
记得看注释哦
代码如下:
# 目标网页地址
url = 'https://www.baidu.com/'
# 定义请求头的浏览器代理,伪装成浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36',
'host': 'www.baidu.com'}
# 请求网页
response = requests.get(url, headers=headers)
print('status_code:', response.status_code)
# 解析 HTML 文档
soup = BeautifulSoup(response.text, "lxml")
# 获取相应标签里的内容
textarea = soup.find("textarea", id="hotsearch_data")
代码不多就三操作合一啦。
其它代码还好说,主要是最后一行代码,看下图应该就明白了(获取的也就是这个标签下的内容)。
代码如下:
# 进行切片处理无用信息,并用json格式读取数据
data_str = textarea.text.split('>')[-1] # 作用是把标签去掉,只保留热榜数据
data = json.loads(data_str)
# 打开一个文本文档并写入
with open('hotsearch.txt', 'w', encoding='utf-8') as f:
# 遍历这些数据
for item in data["hotsearch"]:
# 获取标题、链接、排名信息
card_title = item["card_title"]
linkurl = item["linkurl"]
index = item["index"]
hotTags = item["hotTags"]
heat_score = item["heat_score"]
# 写入文件
if hotTags == '3': # 表示这个标题当前有《热》的红色角标
f.write(f'标题:{card_title} \u2605 \u2605 \u2605 \u2605 \u2605 \n')
else:
f.write(f'标题:{card_title}\n')
f.write(f'链接:{unquote(linkurl)}\n')
f.write(f'热度:{heat_score}\n')
f.write(f'排名:{index}\n\n')
写点爬虫小程序来替自己搜一些东西还挺有趣的。以前需要自己手动花老长时间从网上搜,现在程序刷的一下就好了。