我非常喜欢一位投资人的投资风格和分享的投资理念,老粉如果注意过的话,我之前其实提到过一次。最近他不在微博说话了,因为被迫要收取投顾费,所以他转到了且慢基金社区的同路人小组去发言。

我就想着记录下他的投资理念,方便未来哪天,大佬身退了,我也能学个5成的水平。

最后的数据

在开始正文之前,我想要警告各位:

本文不需要太高的技术水平,如果有兴趣,应该可以在几个小时到一天内复现

我们不会的,AI会的,让他教我们。

使用国内版本的Trae,可以完成。

另外,本文不构成任何投资建议。

https://www.trae.cn/

我不会的,AI会

所以我就问Gemini

怎么爬取

网络爬虫

这里为什么会问Obsidian呢,是因为我最近在将我自己所有的知识体系向这里转移。

很明显,看来我需要写一个网络爬虫才能实现我的诉求了。我真正意识到的问题不是“我不会写代码”,而是“我之前问错了问题”。

我已经自己写过爬取静态网页,就是请求一次,所有内容都展示的网页。

但是很明显,且慢的网页不是的,他是动态的,因为有很多内容都需要点击查看全文、查看更多,甚至会跳转到一个新的网页。

动态网页,静态网页

且慢

所以,我紧接着问了Gemini一个问题:

保存html

这个时候我的想法其实是,将html保存到本地,让后让Claude去分析html结构,最后直接写脚本爬取(这个时候我完全还是静态网页的思维,还没有想到动态网页的方式)。

但是看完以后,我就知道了,我这个网页是动态加载的,他提醒到我了。

提需求

我就寻思,既然他说可以保存到本地html,我就让他写个脚本,然后找Claude code来分析,直接给我写个爬虫脚本不就行了。

很快它就把代码给我写好了。并且告诉我如何使用。

需要让我登录

这段代码的价值不是“让你学 Playwright”,而是一次性帮你把动态页面“拍平”为静态 HTML。你完全不需要理解这段代码的每一行,只要知道:它的产出是一个“可被 AI 分析的 HTML 文件”。

import time
from playwright.sync_api import sync_playwright

def save_dynamic_webpage(target_url, output_filename="saved_webpage.html"):
"""
启动浏览器,允许用户手动登录,然后保存动态加载后的网页内容。
"""
print(f"🚀 正在启动浏览器机器人...")

# 启动 Playwright
with sync_playwright() as p:
# headless=False 表示我们要看到浏览器界面,这样你才能去登录
browser = p.chromium.launch(headless=False, slow_mo=50)

# 创建一个新页面,并模拟成常规的 Windows 桌面浏览器分辨率
context = browser.new_context(viewport={'width': 1920, 'height': 1080})
page = context.new_page()

print(f"🌐 正在前往目标网页: {target_url}")
page.goto(target_url)

# --- 关键步骤:把控制权交给你 ---
print("\n" + "="*50)
print("【请注意】浏览器已打开!")
print("1. 请在弹出的浏览器窗口中,手动完成登录(扫码或输密码)。")
print("2. 登录成功,并且看到你想爬取的数据加载出来后...")
input("👉 请回到这黑色窗口,按【回车键 (Enter)】继续执行抓取...")
print("="*50 + "\n")
# --------------------------------

print("🔄 正在模拟鼠标滚动,触发页面的动态加载(懒加载)...")
# 很多网页是滑到底部才加载新内容,我们模拟滚到底部5次
for i in range(5):
page.mouse.wheel(0, 5000) # 向下滚动
time.sleep(2) # 等待网页转圈圈加载数据
print(f" 已滚动第 {i+1} 次...")

print("💾 正在提取页面最终的 HTML 代码...")
# 获取经过 JS 渲染后的完整 HTML
html_content = page.content()

# 保存到本地文件
with open(output_filename, "w", encoding="utf-8") as f:
f.write(html_content)

print(f"✅ 成功!网页已保存为: {output_filename}")
print("👋 这里的 html 文件现在包含了所有动态加载的数据,可以直接发给 AI 分析了。")

browser.close()

if __name__ == "__main__":
# --- 在这里修改你想保存的网址 ---
url = "https://www.example.com/login" # 把这里换成你要爬的那个保险或数据网站

save_dynamic_webpage(url)

ok,这是一个脚本,但是我们不会运行啊。

如何安装环境

没关系,问AI,让他告诉我们,我应该如何在本地运行。

如何在本地运行

哇,好复杂。

使用Trae

大家还记得我们最开始装了Trae。现在打开它,只要输入:

我现在需要运行一个基于 Python 和 Playwright 的网页爬虫脚本。
请作为一个高级技术专家,帮我检查并准备好本地的运行环境。

请按顺序执行以下步骤(如果遇到问题,请告诉我怎么解决):

1. **检查 Python 环境**:请检查我的电脑是否已经安装了 Python。
* 如果没有安装,请指导我最简单的安装方式(或者尝试用 winget 安装)。
* 如果已安装,请告诉我版本号。

2. **安装依赖库**
* 请帮我在终端运行命令安装 `playwright` 库。
* 安装完成后,**务必**自动帮我运行 `playwright install` 命令来下载浏览器内核(这一步很重要,不要漏掉)。

3. **创建脚本文件**
* 请在当前目录下创建一个名为 `save_page.py` 的文件。
* 将以下代码写入文件中(这是为了解决动态网页加载和登录问题的代码)

trae

如何来写需求

虽然,现在的AI很厉害了,在写代码上面,国内的kimi-k2和GLM-4.7,可以完成这个写代码的任务,但是,还是需要我们准确的描述需求。

我对爬虫的熟悉程度只能说懂5%吧,所以,继续问AI。

怎么写AI编程提示词

动态爬虫

这里他给我写的这个方法,我以前是真的不知道。这次真的是学到了。按照他给我的详细步骤,我去查看了且慢的网页,真的如他所说,响应结构是json。

然后,大家如果真的实操,请好好看这张图(如果看不懂就依次问AI):

F12看网络请求

大家可以看到这个请求的内容和左边是对不上的,左边多,右边少。

实际上,我们也确实需要点击全文,就会跳转到一个新的tab页:

新的tab页

我们接下来,就依次观察这两个页面,将两个页面对应的这个页面的请求URL和响应的json,复制下来保存。

复制

就像这个样子:

response结果获取

这里,我还需要跟大家说的是,大家如果仔细观察,就会发现。他是有多个URL的。

帖子url

所以,我们需要粘贴复制很多次,还要仔细观察。

其实到了这里,需求就写完了。

AI 写代码的前提不是你会不会代码,而是你是否能把「系统边界」和「数据形态」描述清楚。换句话说,写 AI 爬虫编程提示词时,只要想清楚三件事:

  1. 数据从哪里来(接口 / 页面 / 文件)
  2. 数据长什么样(HTML / JSON / 列表)
  3. 最终要变成什么(Markdown / 表格 / 数据库)

如何开发

如果你对输出结果没什么特别的要求,那就直接将这个json和你的需求,告诉Trae,让他给你开发,然后测试对比就行了。

可以参考下面的提示词:

请帮我编写 Python 代码(使用 requests 库)。
目标:抓取且慢“长赢同路人”小组内容,生成 Obsidian 格式的 Markdown 文件。
核心逻辑:
分组策略:按 createdAt 中的日期(YYYY-MM-DD)分组。同一天发布的所有帖子,写入同一个 Markdown 文件,文件名为 YYYY-MM-DD.md。
图片处理:
在本地创建一个 attachments 文件夹。
解析帖子内容中的图片 URL,下载并保存为 PostID_序号.jpg。
在 Markdown 中插入 ![[PostID_序号.jpg]]。
评论筛选逻辑:
白名单用户:['ETF拯救世界', '新米练习菌']。
遍历 commentList,如果 userName 在白名单中,或者是白名单用户回复了别人(toUserName),则保留。
格式:> **用户名** 回复 **被回复人**:评论内容。
Markdown 模板要求:
文件头 (Frontmatter):
code
Yaml
---
date: 2025-12-12
tags: [长赢计划]
---
帖子结构:
每个帖子用二级标题分隔,标题包含时间,例如:## 09:57。
紧接着引用块显示元数据(ID、链接)。
然后是正文。
最后是一个“精选评论”小节,列出筛选后的评论。
数据源:
列表 API: https://qieman.com/pmdj/v2/community/post/list...
详情 API: https://qieman.com/pmdj/v2/community/post/info...
(请在代码中预留 Headers 填空处)
请写出完整的 Python 脚本。

数据源这里,就把你复制的URL和响应结果的json给到它就可以。

这里其实是最费时间的….本文主要讲的还是思路。但是如果你按照这个思路做,一定能做出来。

迭代10个版本

其实,这里,如果我不是对输出的结果,要求评论必须怎么排版、布局、排序的话,第二个版本,就已经可以完成我们的需求了—批量抓取全部的帖子和文章内容。

网络爬虫,一定要注意不要对人家的服务器造成影响。频率要低。最好按照爬虫协议执行:

查 robots.txt(网站爬虫协议)

  • 访问格式:https:// 目标域名 /robots.txt(如https://www.baidu.com/robots.txt)。
  • 关键字段:User-agent(指定爬虫,* 代表所有)、Disallow(禁止路径)、Allow(允许路径)、Sitemap(站点地图)。
  • 示例解读:User-agent: * / Disallow: /admin/ → 禁止所有爬虫访问 /admin/;Allow: /public/ → 允许访问 /public/。

两个简单地单篇文章获取方法

上面的批量爬取,确实比较麻烦,如果一点技术背景都没有,可能要琢磨好久。

还有一种操作方式,就是需要每天都点,麻烦:

安装浏览器插件:

Obsidianhttps://chromewebstore.google.com/detail/obsidian-web-clipper/cnjifjpddelmedmihgijeibhnjfabmlf

飞书剪存https://chromewebstore.google.com/detail/飞书剪存/mofcmpgnbnnlcdkfchnggdilcelpgegn

这两种方式,需要你在本地安装飞书或者是Obsidian。当然这两个插件,可以尝试剪存万物,比如你喜欢的公众号的文章。

就是麻烦在,每天都需要登录点击存一下,不然就会一下子积攒好多。

而上面的脚本,后续我就可以通过在win电脑上面,设置任务计划程序,实现定时自动执行

有了这些材料,我后面可以自己做个知识库,供我学习,各有利弊。

总结下来,如果你想照着做一遍,只需要完成这 6 步:

  1. 明确你要长期保存的内容来源
  2. 用 AI 判断网页是静态还是动态
  3. F12 → Network → 找 JSON 接口
  4. 把接口 + 响应丢给 AI 写爬虫
  5. 输出为你熟悉的知识格式(如 Obsidian)
  6. 用任务计划程序实现自动化。
    如果你和我一样,希望长期、系统地保存高价值信息,这套思路非常值得一试。
    在 AI 时代,真正的学习不是“学会一项技术”,而是“学会如何让 AI 替你补齐技术短板”