python爬虫实战(3)--爬取某乎热搜

1. 分析爬取地址

打开某乎首页,点击热榜

这个就是我们需要爬取的地址,取到地址某乎/api/v3/feed/topstory/hot-lists/total?limit=50&desktop=true

定义好请求头,从Accept往下的请求头全部复制,转换成json

复制代码
headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': '你的请求头中的cookie',
    'Sec-Ch-Ua': 'Not/A)Brand\';v=\'99\', \'Google Chrome\';v=\'115\', \'Chromium\';v=\'115',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': 'Windows',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
    'X-Ab-Param': '',
    'X-Ab-Pb': 'CgInBxIBAA==',
    'X-Api-Version': '3.0.76',
    'X-Requested-With': 'fetch',
    'X-Zse-93': '101_3_3.0',
    'X-Zse-96': '2.0_6hUp=vt8=9zOcwtPHcLjutT0sL2PhwOPys0v=fvQr7yneBCmMO2zkvXcYfoc5esu'
}

2. 分析请求结果

通过请求可以看出,hot-lists/total?limit=50&desktop=true请求后的返回参数直接是json格式,则不需要单独处理

定义好需要抓取的参数按元素获取即可

复制代码
    order_list = []  # 热榜排名
    title_list = []  # 热榜标题
    desc_list = []  # 热榜描述
    url_list = []  # 热榜链接
    hot_value_list = []  # 热度值
    answer_count_list = []  # 回答数
    data_list = json_data['data']
    order = 1  # 热榜排名初始值

GET请求接口

复制代码
    response = requests.get(url=url, headers=headers)
    json_data = response.json()

循环数组json并赋值

复制代码
        order_list.append(order)
        # 热榜标题
        title = data['target']['title_area']['text']
        print(order, '热榜标题:', title)
        title_list.append(title)
        desc_list.append(data['target']['excerpt_area']['text'])
        url_list.append(data['target']['link']['url'])
        hot_value_list.append(data['target']['metrics_area']['text'])
        answer_count_list.append(data['feed_specific']['answer_count'])
        order += 1```
将结果导出到csv,注意定义一下编码集为utf_8_sig

df = pd.DataFrame(
    {
        '热榜排名': order_list,
        '热榜标题': title_list,
        '热榜链接': url_list,
        '热度值': hot_value_list,
        '回答数': answer_count_list,
        '热榜描述': desc_list,
    }
)
# 保存结果到csv文件
df.to_csv('知乎热榜.csv', index=False, encoding='utf_8_sig')

### 3. 结果验证
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb0b9fdced6241e9bd7d6e941826b389.png)
###  注意:如果请求返回的json格式乱码,调整请求头Accept-Encoding,去掉br后即可
相关推荐
北冥有鱼被烹8 分钟前
Linux timeout 命令完全指南:指定固定时间并发送固定信号
python
郝学胜-神的一滴12 分钟前
游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱
开发语言·计算机网络·程序人生·游戏·游戏引擎
SunnyDays101116 分钟前
如何使用 Python 将 PowerPoint(PPT 或 PPTX)转换为 Markdown
python·ppt转markdown·pptx转markdown·powerpoint转md
PiaoKe___17 分钟前
云手机原理与 Python 自动化实战:ADB、REST API、WebSocket 群控入门
python·智能手机·自动化
co_wait19 分钟前
Python 迭代器(一)
python
m0_3807438720 分钟前
Qt实现调用相机进行拍照并进行图像处理
开发语言·c++
wangqiaowq28 分钟前
AST 安全求值
java·开发语言
我们从未走散34 分钟前
AI 生图平台如何避免资损:用“扣款与凭据同事务”构建三态账本
开发语言·数据库·php
weixin_440730501 小时前
字符编码笔记-utf-8 、unicode、gbk,ascii编码格式
开发语言·笔记
励志不掉头发的内向程序员2 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构