• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

白又白i

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

我用Python抓取了吴某微博事件的热评,边聊技术边吃瓜

大家好,我是辣条。

之前有写过一篇爬取微博热评的文章,奈何最近吴某的瓜实在太大了,全网都关注着这件事,直到昨天官方【公安部门】出来说明,这一事件有了小句号,今天和大家聊聊抓取微博热评,顺便了解此次事件来龙去脉。

爬取目标

网址:微博

 

效果展示

工具使用

开发环境:win10、python3.7

开发工具:pycharm、Chrome

工具包:requests、re,csv

项目思路解析

找到需要吃瓜的文章

请求头需要带上的基本配置数据

headers = {
    "referer": "",
    "cookie":"",
    "user-agent": ""
}

找到文章动态提交的评论数据

通过抓包工具找到对应的评论数据信息

https://m.weibo.cn/comments/hotflow?id=4661850409272066&mid=4661850409272066&max_id=5640809315785878&max_id_type=0

微博的url会有一个文章id,mid也是文章id, max_id是每个json数据里面的max_id,是没有规律的

取出当前的max_id,就会获取到下个页面的请求接口

简易源码分析

import csv
import re
import requests
import time

start_url = "https://m.weibo.cn/comments/hotflow?id=4661850409272066&mid=4661850409272066&max_id_type=0"
next_url = "https://m.weibo.cn/comments/hotflow?id=4638585665621278&mid=4661850409272066&max_id={}&max_id_type=0"
continue_url = start_url
headers = {
    "referer": "https://m.weibo.cn/detail/4638585665621278",
    "cookie": "SUB=_2A25Nq-BcDeRhGeBG7VUW-SnEyjyIHXVvV4AUrDV6PUJbkdAKLULFkW1NRhXYfC2JIAilAAFJ_-2diWZ1ZEACRZ5K; SCF=AgGUxHxg_ZjvVbYikCOVICTc-a4gDcEtR02fexDZstBq_XKr3s1Rp9CxdS4y4k4IvDQ2eIgTTyJg73pcUmvYRKc.; _T_WM=58609113785; WEIBOCN_FROM=1110006030; MLOGIN=1; M_WEIBOCN_PARAMS=oid%3D4638585665621278%26luicode%3D20000061%26lfid%3D4638585665621278%26uicode%3D20000061%26fid%3D4638585665621278; XSRF-TOKEN=06ed3f",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
count = 0

def csv_data(fileheader):
    with open("wb1234.csv", "a", newline="")as f:
        write = csv.writer(f)
        write.writerow(fileheader)


def get_data(start_url):
    print(start_url)
    try:
        response = requests.get(start_url, headers=headers).json()
        max_id = response['data']['max_id']
    except Exception as e:
        get_data(start_url.split("type")[0] + "type=1")

    else:
        # max_id = response['data']['max_id']
        content_list = response.get("data").get('data')
        for item in content_list:
            global count
            count += 1
            create_time = item['created_at']
            text = "".join(re.findall('[\u4e00-\u9fa5]', item["text"]))
            user_id = item.get("user")["id"]
            user_name = item.get("user")["screen_name"]
            # print([count, create_time, user_id, user_name, text])
            csv_data([count, create_time, user_id, user_name, text])

        global next_url
        continue_url = next_url.format(max_id)
        time.sleep(2)
        get_data(continue_url)


if __name__ == "__main__":
    fileheader = ["id", "评论时间", "用户id", "user_name", "评论内容"]
    csv_data(fileheader)
    get_data(start_url)

①3000多本Python电子书有

②Python开发环境安装教程有

③Python400集自学视频有

④软件开发常用词汇有

⑤Python学习路线图有

⑥项目源码案例分享有

欢迎关注公众号:【白又白学Python】无偿领取

posted on 2021-09-03 13:39  白又白i  阅读(167)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3