本文主要记录一些在岷史编纂过程中学习认识到的一些技术操作,不用估计很快就会忘记的那种。
Excel超链接提取网址
原地址:https://zh-cn.extendoffice.com/documents/excel/1177-excel-extract-hyperlink-from-cell.html
使用自定义函数从超链接中提取实际地址
以下自定义函数也可从超链接中提取实际 URL。
1. 按住 ALT + F11 键,打开 Microsoft Visual Basic for Applications 窗口。
2. 单击插入 > 模块,并将以下代码粘贴到模块窗口中。
Function GetURL(pWorkRng As Range) As String
'Updateby Extendoffice
GetURL = pWorkRng.Hyperlinks(1).Address
End Function
3. 保存代码并关闭此窗口,选择一个空白单元格,输入公式 =GetURL(A2)(A2 为包含超链接的单元格),然后按 Enter 键,即可立即提取真实超链接地址。
不过有个问题,就是似乎每次重新打开后Excel会不识别这个自定义函数,所以建议获取链接后复制到Word里变成文本再复制回Excel,不然每次都要重新设置函数了。
百度贴吧帖子爬取(特定用户在特定贴吧的帖子)
2026年2月23日前后千舸竞流为爬取籽岷在籽岷吧等贴吧发布的所有未删公开帖子所研究出来的。使用了Charles抓包,在MuMu模拟器上运行手机百度贴吧。以下是和AI合作后搞出来的Python代码。只能爬取特定用户在特定贴吧的帖子,且用户个人主页不可见的帖子也无法显示。
import requests
import time
import random
# 目标API地址
url = "https://tieba.baidu.com/c/u/feed/userpost"
# 构建请求头 (Headers)
# 注意:您提供的原始请求头中,`Host` 和 `Origin` 的值需要补全。
headers = {
"Host": "tieba.baidu.com",
"Connection": "keep-alive",
# “Content-Length” 在 requests 库中会自动计算,无需手动设置。
# "Content-Length": "1728",
"Accept": "application/json, text/plain, */*",
"Acs-Token": "",
"x-requested-with": "XMLHttpRequest",
"Subapp-Type": "hybrid",
"User-Agent": "Mozilla/5.0 (Linux; Android 12; PGJM10 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36 tieba/22.1.1.0 skin/default",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://tieba.baidu.com",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "",
"Accept-Encoding": "gzip, deflate", # requests库会自动处理解码,建议移除或保留
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
"Cookie": ""
}
start = 1
end = 90
for pn in range(start,end +1):
# 构建请求体 (Body)
# 这是 application/x-www-form-urlencoded 格式的原始字符串
data_string = (
"")
data_strings = (data_string + str(pn) + "&subapp_type=hybrid")
try:
response = requests.post(url, headers=headers, data=data_strings, verify=False)
# 禁用SSL验证后,可以添加一个警告抑制,避免控制台输出大量警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
text_content = response.text
with open(f'{pn}.json', 'w', encoding='utf-8') as f:
f.write(text_content)
print(f"文件已保存为 {pn}.json")
print(f"状态码: {response.status_code}")
#print("响应内容:")
#print(response.text)
except Exception as e:
print(f"请求发生异常: {e}")
print(f'当前第{pn}页')
def human_like_delay():
"""模拟人类操作的随机延时"""
# 基础延时 + 随机波动
base_delay = 10.0 # 基础10秒
random_factor = random.uniform(-0.5, 2.5) # 随机波动
total_delay = max(2, base_delay + random_factor) # 确保不小于0.5秒
return total_delay
# 使用
delay = human_like_delay()
print(f"类人操作延时: {delay:.2f}秒")
print('====================')
time.sleep(delay)
因为本来就是原型机,所以比较粗糙。
开头请求贴吧的API:”https://tieba.baidu.com/c/u/feed/userpost”。
请求头Headers因为有隐私信息,所以删去了”Acs-Token””Referer””Cookie”。这一部分有些内容可以选择用抓包,但有的也可以用浏览器F12检查功能去网络里面看。
请求体Body部分的data_string是重点,因为也带有隐私信息所以删了。data_string的最后一部分长这样:
"……&call_from=forum_level&forum_id=2940165&uid=834142732&pn="
其中,
forum_id就是该吧的ID,是爬虫爬出来的,比如“https://tieba.baidu.com/mo/q/hybrid-main-frs/baTitle/hybrid?customfullscreen=1&nonavigationbar=1&loadingSignal=1&fid=2940165&page_from=custom_business_card&cuid=……”
这串网址是点击用户头像用户名后跳出的“Ta在本吧”抓包的网址,其中“fid=”后便是贴吧ID。
uid就是用户的ID,可以从网页端找一个用户发送的帖子,然后点进他的个人空间,然后点私信,比如籽岷的私信就是“http://tieba.baidu.com/im/pcmsg?from=664943266&red_tag=f1738819582”,from=后面的就是籽岷的uid。这个id也可以抓包。
以下是当时爬的时候留下的资料:
#forum_uid:
#籽岷吧:2940165
#minecraft吧:2432903
#我的世界吧:327627
#极游网吧:1817620
#user_uid:
#籽岷:664943266
#极游网ggg:533781103
#极游网:533353968
#岷吧(活)化石带user_id:
#哐哐🍊gra:651984166
#YURIAndre:838327492
#酷热火君:613369952
#JuIius_Tetsuo:2909697492(见p/4985357932)
#mc大爱籽岷:994662744
#扎姆:142513022
#美竹蘭:1302456456
#Smile淡莣833:959596083
#icrdr2010:207033663
请求体前设置的start和end后的数字便是加在请求体pn=后面的页数范围,这版代码里的是1至90页,贴吧的一页是20个帖子。这个页数范围的上限一般人都达不到。
把一个人的帖子都爬下来之后,如果程序未停止,就会一直返回大小为4KB的json文件,还是很好识别的,这个时候就可以把程序停止了。
其实想研究过从个人主页直接爬取这个人发布的所有帖子,这样子肯定更全面。但是似乎比这个特定贴吧要复杂,而且我的目的已经达到了,所以当时就没有继续研究下去了。


