基于 AI Agent 的童话编剧与绘本生成器(二)——爬虫篇

张开发
2026/4/13 1:18:12 15 分钟阅读

分享文章

基于 AI Agent 的童话编剧与绘本生成器(二)——爬虫篇
上一篇文章发表后组内成员说不用写那么长的代码介绍建议我只对实现的核心功能进行概括。一、实现的爬虫脚本在第4、5周实现了“从公开网页目前选则 Storyberries拉取童话/绘本类文本”的爬虫为后面的「编剧 / 绘本生成」提供语料或参考素材。在文件头写明了两个目标站点及正文所在 DOM文档对象模型 区域。二、环境与依赖Python 标准库为主urllib、argparse、csv、pathlib、re等不引入requests。童话站点多半是服务端渲染或传统 HTML用html.parser CSS 选择器足够标准库urllib降低依赖冲突和爬虫场景匹配。环境依赖必须安装 BeautifulSoup4解析 HTML若未安装脚本在 main() 里会直接退出并提示 pip install beautifulsoup4。三、主要模块职责介绍表逻辑区块代表函数/常量职责全局配置BASE_URL、UA、DEFAULT_CATEGORY_RANGE站点根地址、合规 UA、默认分类 ID 范围HTTP 基础设施build_http_opener、http_get、http_get_bytes、decode_body代理、重试退避、超时、正文/二进制下载、编码探测Storynook 链接发现normalize_site_url、extract_story_ids_from_html、collect_story_urls从首页与/story/list/{分类}/{页}收集/story/{id}Storynook 正文解析parse_story_page标题 #storyContent/.article-content纯文本Storyberries 列表与正文collect_storyberries_story_urls、parse_storyberries_article分类翻页、h2.entry-title a、.entry-content与插图 URL插图辅助_parse_srcset_best、_img_best_url、extension_for_imagesrcset取最大宽度图、扩展名推断运行与 CLI运行与 CLI探针模式、两站点分支、写txtstories_metadata.csv四、HTTP 层单独写http_get和decode_body1. 编码网页charset可能不准或缺失。decode_body先信响应头/提示再依次尝试utf-8、gbk、utf-8-sig最后用replace兜底避免中文乱码或整段解析失败。2. 重试与退避对408/429/5xx和部分网络错误做有限次重试间隔min(2**attempt, 20)减轻对目标站压力也提高弱网下的成功率。3. 用户提示print_timeout_hint在超时类错误时打印可操作提示。五、Storynook从「发现 URL」到「存 txt」1. URL 发现策略先抓首页用正则 normalize_site_url收集形如/story/数字的链接排除列表页等。若未加--no-list-crawl再按分类 ID 区间遍历列表页若连续两页没有新 ID 则提前停止避免无意义翻页。2. 正文解析标题#storyTitle 或 h1.article-title正文#storyContent 或 .article-content去掉 script/style 后 get_text(\n, stripTrue)得到适合后续 NLP 或 Agent 的纯文本段落。3. 落盘与元数据每篇一个 {序号}_{标题}.txt根目录下 stories_metadata.csvUTF-8-SIG 方便 Excel字段含 title、url、text_chars、local_txt 等失败时 status 记录 fetch_error / parse_error / text_too_short便于批量跑完后统计质量。六、Storyberries绘本站点的额外复杂度插图1. 列表页WordPress 分类支持/page/N/用h2.entry-title a[href]收集文章链接并规范到www.storyberries.com避免重复。2. 正文与图正文仍在.entry-content插图从img上取 URL优先解析srcset里宽度最大的候选现代站点常用响应式多图再回退data-src/src过滤gravatar、/emoji/等非内容图。3. 可选下载--no-images时只存文本否则按篇建子目录用http_get_bytes写文件扩展名由 URL 或Content-Type推断。七、当前成果总结双站点统一 CLIStorynook 爬取“短篇文本语料”Storyberries爬取“带图绘本页”。重试、延迟、代理、探针模式齐全。爬取效果大致如下。

更多文章