requests案例——爬取微博的一级和二级评论

案例需求:

1.爬取该网页下的一级评论和二级评论

https://m.weibo.cn/detail/4813628149072458

36b59627ef6044ae865f383c66846596.png

2.

3.

分析:

1.找到一级评论请求地址

a18642a4d4194091933c6920aa42e05c.png

url请求地址:

43869e32bfe541d8a477c62fd2407f1e.png

fec3e93cf1fd4c6a9a011715029c2479.png

二级url地址

cf1b4ceba6c54c72bbf9dd7a154c92c2.png 

分析翻页参数——可知翻页是从第二页开始的

从而得到:

移动端链接:https://m.weibo.cn/detail/4813628149072458
一级评论接口:https://m.weibo.cn/comments/hotflow?id=4813628149072458&mid=4813628149072458&max_id_type=0
    --参数:
        id: 4813628149072458
        mid: 4813628149072458
        max_id_type: 0
        max_id: 13883307764046392 #翻页参数---从第二页开始 (在上一页一级评论接口可以找到)

二级评论接口:https://m.weibo.cn/comments/hotFlowChild?cid=4813628329693567&max_id=0&max_id_type=0
    ---参数:
            cid: 4813628329693567
            max_id: 0 #二级翻页参数(在上一页评论接口中可以找到)
            max_id_type: 0

获取一级评论

import requests
from jsonpath import jsonpath
import re


class Weibo():
    def __init__(self):
        self.one_url = 'https://m
### 使用 Python 抓取新浪微博二级回复教程 #### 准备工作 为了成功抓取微博二级评论,需先安装必要的库。可以使用 `pip` 安装这些依赖项: ```bash pip install requests beautifulsoup4 lxml ``` #### 获取请求头参数 访问微博页面时,浏览器会发送特定的HTTP头部信息以及URL查询字符串参数。对于微博API接口而言,通常需要设置User-Agent来模拟真实用户的浏览行为[^2]。 #### 构建请求函数 构建一个通用的GET请求函数用于发起网络请求并处理返回的数据。此部分代码展示了如何定义这样一个辅助方法: ```python import json import time from urllib.parse import urlencode import requests def get_page(url, params=None): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': 'https://m.weibo.cn/' } try: response = requests.get(url=url, params=params, headers=headers) if response.status_code == 200: return response.json() else: print(f"Error occurred while fetching page: {response.status_code}") return None except Exception as e: print(e) return None ``` #### 解析JSON响应 微博API返回的结果通常是JSON格式,在这里解析这个结构化数据以提取所需的字段。下面是一个简单的例子展示如何遍历每一条顶级评论及其子级(即二级)评论列表: ```python def parse_comments(data): items = [] comments = data['data']['replies'] or [] # 如果存在则获取顶层评论 for comment in comments: item = {} item['id'] = str(comment['id']) item['text'] = comment['text'] item['user_name'] = comment['user']['screen_name'] subcomments_url = f"https://m.weibo.cn/comments/hotFlowChild?cid={item['id']}&max_id_type=0" result = get_page(subcomments_url) if isinstance(result, dict): child_comments = result.get('data', []) children = [] for cmt in child_comments: child_item = {'sub_user':cmt['user']['screen_name'], 'sub_text':cmt['text']} children.append(child_item) item['children'] = children items.append(item) return items ``` #### 主逻辑实现 最后一步就是组合上述组件完成整个流程控制。通过循环调用`get_page()` `parse_comments()`, 可持续加载更多页数直到达到最大限制或无更多信息为止。 ```python if __name__ == '__main__': base_url = "https://m.weibo.cn/api/statuses/repostTimeline?id=" weibo_id = input("请输入要爬取微博ID:") max_pages = int(input("请输入最多爬取多少页:" )) all_items = [] for i in range(max_pages): url = base_url + weibo_id + "&page=" + str(i+1) res = get_page(url) if not res: break new_items = parse_comments(res) all_items.extend(new_items) time.sleep(1) # 防止频繁请求被封禁 IP 地址 with open('./weibo_comments.json','w+',encoding='utf-8')as fp: json.dump(all_items,fp,ensure_ascii=False,indent=2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值