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.说明
**本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!** headers快速复制替换{:1_918:}
把对应的对象复制到python中 报错是什么情况 PEKING1 发表于 2024-2-8 20:27
headers快速复制替换
把对应的对象复制到python中
楼主太强大了! 能连同图片、视频一起保存了吗 很有趣,也很实用 这个好玩,应用于某种场合可能更方便。
感谢分享。 值 得学习,感谢分享! taoxwl666 发表于 2024-2-8 21:20
报错是什么情况
相关代码要替换一下 lianquke 发表于 2024-2-8 22:11
能连同图片、视频一起保存了吗
保存的是url,文件的话还要另作分析
页:
[1]
2