爬取百度热搜榜
文章目录
- 爬取百度热搜榜
- 前言
- 一、展示哪些东西
- 二、基本流程
- 三、前期数据获取
- 1.引入库
- 2.请求解析获取
- 四、后期数据处理
- 1.获取保存
- 总结
前言
每次打开浏览器,我基本上都会看一下百度热搜榜。这篇我就写一下如何获取百度的热搜榜信息吧。
如果到最后看的云里雾里的,请先看我写的上一篇《Python 爬虫之简单的爬虫(一)》https://blog.csdn.net/weixin_57061292/article/details/135038581
一、展示哪些东西
- 其实每个标题背后有很多数据类型,我挑一些有用的东西展示了出来。
- 其中有标记 五角星 的标题含义是看下图:
二、基本流程
主要是以下几部分(下文基本会按照这个步骤来写):
- 导入需要的库
- 要测试的网页
- 生成代理,请求网页
- 请求成功,解析网页,找到并保存想要的东西
- 请求失败,返回相应状态码
三、前期数据获取
1.引入库
代码如下:
# 将这个编码后的链接解码回原始的URL格式
from urllib.parse import unquote# 用于发送 HTTP 请求
from bs4 import BeautifulSoup# 这是一个用于解析 HTML 和 XML 文档
import requests# 用于处理下面获取的数据
import json
记得看注释哦
2.请求解析获取
代码如下:
# 目标网页地址
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")
代码不多就三操作合一啦。
其它代码还好说,主要是最后一行代码,看下图应该就明白了(获取的也就是这个标签下的内容)。
四、后期数据处理
1.获取保存
代码如下:
# 进行切片处理无用信息,并用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')
- 第一步:进行切片处理,把无用信息删掉,并用json格式读取数据。用json方便后期的数据处理,减少难度。
- 第二步:打开先打开一个文本文档,为了后面一边遍历数据内容一边写入文件。
- 第三步:就像开头展示的,把那五种数据类型获取到。
- 第四步:把获取到数据整理一下写入到文件中。
总结
写点爬虫小程序来替自己搜一些东西还挺有趣的。以前需要自己手动花老长时间从网上搜,现在程序刷的一下就好了。