前言
最近属于是无事可做,在论坛看到有个朋友要求爬某博的博文,为了有事可做,顺便回忆一下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.说明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!