为了了解女朋友的小心思,我用 python 爬了榜姐微博下 70000 个女生小秘密!

#编程技术 2022-03-19 23:45:00 | 全文 982 字,阅读约需 2 分钟 | 加载中... 次浏览

👋 相关阅读


震惊!某程序员竟通过技术手段掌握 70000 个女生小秘密,然后做出…

常被叫做直男的你,是不是经常困惑于女生的那些小心思,对女生不甚了解?

Alt text

微博榜姐曾经搞过一个话题, “女生哪些小秘密,是很多男生不知道的”

下边竟然有 70000 多条评论!

70000 多个女生的小秘密啊!作为一个什么都不懂的男孩子,你是否好奇呢?

不管你好不好奇,反正我是挺好奇的!

Alt text

相信看了这 70000 多个女生小秘密之后,女朋友再也不会说你是直男了!

但是!像我这种懒人,怎么可能去一条一条翻评论呢

让我们派出懒人神器 Python,一键抓取全部评论,保存到文本,熟读并背诵

只能帮你到这了,骚年!

#!/usr/bin/env python
## coding=utf-8

## @Time    : 2022/3/19 20:10
## @Author  : wangtwothree
## @Site    :
## @File    : 爬微博评论.py
## @Software: PyCharm
import requests
import re


def bcpl(weibo_id, url, headers, number):
    count = 0  ## 设置一个初始变量count为0来进行计数
    with open("微博id" + str(weibo_id) + ".txt", "a", encoding="utf8") as f:  ## 打开一个名为“微博idxxxxxx”的txt文件,编码utf-8
        ## 当count数量小于预期的number时,进行循环
        while count < number:
            ## 判断是不是第一组评论,如果是的话,第一组评论不需要加max_id,之后的需要加
            if count == 0:
                try:
                    url = url + weibo_id + '&mid=' + weibo_id + '&max_id_type=0'
                    web_data = requests.get(url, headers=headers)  ## F12查看data信息
                    js_con = web_data.json()  ## 转换一下数据格式
                    ## 获取连接下一页评论的max_id
                    max_id = js_con['data']['max_id']  ## max_id在[data]中
                    print(max_id)
                    comments = js_con['data']['data']  ## 获得数据中[data]中的[data]
                    for comment in comments:  ## 依次循环获得comments中的数据
                        comment = comment["text"]  ## 获得[text]下的数据,也就是评论数据
                        label = re.compile(r'</?\w+[^>]*>', re.S)  ## 删除表情符号
                        comment = re.sub(label, '', comment)  ## 获得文本评论
                        f.write(comment + '\n')  ## 写入到文件中
                        count += 1  ## count = count + 1
                        print("已爬取 " + str(count) + " 条评论!")  ## 显示爬取到第几条
                except Exception as e:
                    print("出错了", e)
                    continue
            else:
                try:
                    url = url + weibo_id + 'max_id=' + str(max_id) + '&max_id_type=0'
                    web_data = requests.get(url, headers=headers)
                    js_con = web_data.json()
                    max_id = js_con['data']['max_id']
                    comments = js_con['data']['data']
                    for comment in comments:
                        comment = comment["text"]
                        label = re.compile(r'</?\w+[^>]*>', re.S)
                        comment = re.sub(label, '', comment)
                        f.write(comment + '\n')
                        count += 1
                        print("已爬取 " + str(count) + " 条评论!")
                except Exception as e:
                    print("出错了", e)
                    continue


if __name__ == "__main__":
    ## 设置user-agent来进行伪装,简单突破微博反爬限制
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
    }
    ## 手机端网页!手机端网页!手机端网页!
    ## 手机版微博评论网址
    url = 'https://m.weibo.cn/comments/hotflow?id='
    ## 要爬取的微博id  https://m.weibo.cn/detail/4478512314460101
    weibo_id = '4478512314460101'
    ## 设置爬取评论量,爬取量在第X组,爬取时会爬取下来该组的数据,所以最终数据可能会大于number,一般是个整10的数
    number = 1000
    ## 数据抓取主逻辑
    bcpl(weibo_id, url, headers, number)
Edit | Last updated on 2024-02-23 10:33:45




×