python获取某博个人已发博文,导出为txt

查看 117|回复 9
作者:PEKING1   
python获取某博个人已发博文,导出为txt
前言
最近属于是无事可做,在论坛看到有个朋友要求爬某博的博文,为了有事可做,顺便回忆一下python,原来有很多图的,但因为在本地要挨个上传编辑,太麻烦了些,便没了...
1.梳理
**三个关键网络请求
https://某博.com/a**x/pri****le/detail?uid=作者uid
https://某博.com/a**x/st***ses/mymblog?uid=作者uid&page=页数&feature=0
https://某博.com/a**x/st***ses/longtext?id=展开的longtext_id
文章完整性判断字段:continue_tag
2.实现效果


image-20240208192004186.png (130.98 KB, 下载次数: 0)
下载附件
2024-2-8 20:13 上传

3.代码实现
需要替换的地方:headers,uid,page,url
from datetime import datetime
import re
import requests
from tqdm import tqdm
# 星期映射字典
weekday_dict = {
    'Mon': '星期一',
    'Tue': '星期二',
    'Wed': '星期三',
    'Thu': '星期四',
    'Fri': '星期五',
    'Sat': '星期六',
    'Sun': '星期日'
}
# 获取某博数据
def fetch_moubo_data(uid, page):
    """
    :param uid: 作者uid
    :param page: 某博页数,一页20条
    :return: 20条某博数据
    """
    headers = 你的headers
    url = f"https://www.某博.com/a**x/st***ses/mymblog?uid={uid}&page={page}&feature=0"
    response = requests.get(url, headers=headers)
    return response.json() if response.status_code == 200 else None
# 获取展开内容
def fetch_moubo_longtext(moubo_id):
    """
    :param moubo_id: 某博展开的博文id
    :return: 需展开的某博全文
    """
    headers = 你的headers
    url = f"https://www.某博.com/a**x/st***ses/longtext?id={moubo_id}"
    response = requests.get(url, headers=headers)
    # print(response.json()['data']['longTextContent'])
    f_text = re.sub(r'\n\s*\n*', '', response.json()['data']['longTextContent'])
    # print(re.sub(r'\n\s*\n*', '', response.json()['data']['longTextContent']))
    return f_text if response.status_code == 200 else None
# 格式化时间
def parse_and_format_datetime(created_at):
    """
    :param created_at: 当前某博的发布时间信息,原始为:"Thu Feb 08 11:22:19 +0800 2023"
    :return: 2023,3月,08日        星期三        11:22:19
    """
    # 定义匹配原始字符串的格式
    fmt = "%a %b %d %H:%M:%S %z %Y"
    # 解析字符串为datetime对象
    dt_obj = datetime.strptime(created_at, fmt)
    # 格式化并获取所需信息
    weekday = weekday_dict[dt_obj.strftime('%a')]  # 星期(英文转中文)
    month = dt_obj.month # 月份(英文转中文)
    day = dt_obj.strftime('%d')  # 日期
    year = dt_obj.year  # 年份
    time = dt_obj.strftime('%H:%M:%S')  # 时间
    return f"{year},{month}月,{day}日\t{weekday}\t{time}"
# 使用示例
# data = fetch_moubo_data(88668866888, 1)
data = fetch_moubo_data(88668866888, 1)
if data:
    data_list = data['data']['list']
    with open('你的文件名字.txt', 'a', encoding='utf-8') as f:
        for i in tqdm(data_list):
            if 'continue_tag' in i:
                content = (
                    f"作者:{i['user']['screen_name']}\n"
                    f"发布时间:{parse_and_format_datetime(i['created_at'])}\n"
                    f"发布内容:\n{fetch_moubo_longtext(i['mblogid'])}\n"
                    "----------------------------------------------------------------\n"
                )
                f.write(content)
            else:
                content = (
                    f"作者:{i['user']['screen_name']}\n"
                    f"发布时间:{parse_and_format_datetime(i['created_at'])}\n"
                    f"发布内容:\n{i['text']}\n"
                    "----------------------------------------------------------------\n"
                )
                f.write(content)
else:
    print("无法获取数据")
4.说明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

星期, 博文

PEKING1
OP
  

headers快速复制替换
把对应的对象复制到python中
taoxwl666   

报错是什么情况
HUHU666   


PEKING1 发表于 2024-2-8 20:27
headers快速复制替换
把对应的对象复制到python中

楼主太强大了!
lianquke   

能连同图片、视频一起保存了吗
hungrysharkkk   

这个不错,下载试试看
月巴耳总   

很有趣,也很实用
dujiu3611   

这个好玩,应用于某种场合可能更方便。
感谢分享。
Python666999   

值 得学习,感谢分享!
wangshaobo930   

补习中  感谢分享
您需要登录后才可以回帖 登录 | 立即注册

返回顶部