PEKING1 发表于 2024-2-8 20:17

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

本帖最后由 PEKING1 于 2024-2-8 20:23 编辑

# 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.实现效果




### 3.代码实现

------

<u>**需要替换的地方:headers,uid,page,url**</u>
```python
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# 星期(英文转中文)
    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 发表于 2024-2-8 20:27

headers快速复制替换{:1_918:}
把对应的对象复制到python中

taoxwl666 发表于 2024-2-8 21:20

报错是什么情况

HUHU666 发表于 2024-2-8 21:30

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

楼主太强大了!

怜渠客 发表于 2024-2-8 22:11

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

月巴耳总 发表于 2024-2-8 23:54

很有趣,也很实用

dujiu3611 发表于 2024-2-9 00:28

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

Python666999 发表于 2024-2-9 08:06

值 得学习,感谢分享!

PEKING1 发表于 2024-2-9 10:34

taoxwl666 发表于 2024-2-8 21:20
报错是什么情况

相关代码要替换一下

PEKING1 发表于 2024-2-9 10:50

lianquke 发表于 2024-2-8 22:11
能连同图片、视频一起保存了吗

保存的是url,文件的话还要另作分析
页: [1] 2
查看完整版本: python获取某博个人已发博文,导出为txt