网页标题提取的三大可靠位置与容错管道设计
简介本资源是一份面向Python初学者与入门级开发者的爬虫实践教程聚焦网页文章标题的自动化抓取解决零基础用户快速上手HTTP请求、HTML解析与数据保存的核心问题。内容以实战为导向覆盖requests库发起请求、BeautifulSoup解析标签、标题清洗与本地文本存储等完整链路并提供可直接运行的代码、逐行注释讲解、常见异常处理及反爬注意事项适合用于课堂练习、自学训练或小规模信息采集场景。资源为单文件docx文档共1个文件大小仅17KB结构清晰含代码实现、函数说明、运行示例与扩展建议便于快速查阅与复现。目前已有174人学习下载读者可直接获得开箱即用的爬虫脚本框架、关键知识点图解式梳理及适配不同网页结构的调整思路显著降低从理解到动手的门槛。1. 为什么你写的爬虫总在标题抓取这一步“卡死”不是代码错是没看清网页结构的三重伪装你写了个 Python 爬虫目标很明确从新闻聚合页批量抓取文章标题。requests BeautifulSoup 一套组合拳下去.find_all(h1)或.select(article h2)跑出来却是空列表换用 Selenium页面明明加载出来了driver.find_element(By.TAG_NAME, h1)却抛NoSuchElementException更玄学的是——本地调试时能取到标题一放到服务器上就全变成title标签里的网站名。这不是你 Python 不熟也不是 XPath 写错了而是你面对的早已不是十年前那种“HTML 源码即所见”的静态页面。现代内容站点普遍采用服务端渲染SSR 客户端水合hydration混合模式标题可能藏在 JSON-LD 结构化数据里、被 React/Vue 动态注入进 DOM、甚至通过 CSScontent属性伪元素生成。本篇不讲“爬虫入门”只聚焦一个极窄但高频翻车点如何稳定、可复现、抗干扰地提取真实文章标题。适合正在调试具体项目、被标题字段反复打脸的中初级开发者也适合需要把标题提取模块嵌入自动化内容分发流水线的工程人员。我们不碰反爬对抗策略不聊分布式调度就死磕“标题在哪、怎么拿、为什么拿不到”。2. 标题藏身的三大位置先定位再提取别一上来就写 selector网页中的“文章标题”并非只有一种存在形态。盲目套用h1或article h2是新手最常踩的坑——它假设所有站点都遵守语义化 HTML 规范而现实是标题可能是meta propertyog:title的 Open Graph 字段可能是script typeapplication/ldjson里的headline也可能是某个>from bs4 import BeautifulSoup import requests def extract_title_from_meta(html_content): soup BeautifulSoup(html_content, html.parser) # 优先尝试 Open Graph title og_title soup.find(meta, propertyog:title) if og_title and og_title.get(content): return og_title[content].strip() # 退而求其次Twitter Card twitter_title soup.find(meta, attrs{name: twitter:title}) if twitter_title and twitter_title.get(content): return twitter_title[content].strip() # 最后 fallbackHTML title 标签需清洗 title_tag soup.find(title) if title_tag and title_tag.string: raw_title title_tag.string.strip() # 去除常见后缀如 - 网站名、 | 新闻中心 cleaned raw_title.split(|)[0].split(-)[0].strip() return cleaned return None # 使用示例 resp requests.get(https://example-news-site.com/article/123) title extract_title_from_meta(resp.text) print(f提取标题: {title})逻辑说明此函数按og:title → twitter:title → title三级降序探测每步都做非空校验。关键在title的清洗逻辑——很多站点title是【原创】AI 模型压缩新方法 | 某实验室技术博客直接取会混入栏目名和分隔符split(|)[0]是最简鲁棒解法。参数说明BeautifulSoup(html_content, html.parser)中html.parser是内置解析器无需额外安装若遇 malformed HTML如标签未闭合可换lxml需pip install lxml提升容错。2.2 解析script typeapplication/ldjson结构化数据里的黄金矿JSON-LD 是 Google 推荐的结构化数据格式大量资讯类站点如某跨平台系统文档站、某图像处理Demo官网会在head插入包含type: NewsArticle或BlogPosting的脚本块其中headline字段就是标准文章标题。它比元标签更丰富含datePublished,author且极少被前端 JS 修改。import json from bs4 import BeautifulSoup def extract_title_from_ld_json(html_content): soup BeautifulSoup(html_content, html.parser) script_tags soup.find_all(script, typeapplication/ldjson) for script in script_tags: try: data json.loads(script.string) # 支持单对象或 graph 数组 if isinstance(data, dict) and data.get(type) in [NewsArticle, BlogPosting]: if data.get(headline): return data[headline].strip() elif isinstance(data, list): for item in data: if isinstance(item, dict) and item.get(type) in [NewsArticle, BlogPosting]: if item.get(headline): return item[headline].strip() except (json.JSONDecodeError, TypeError, AttributeError): continue # 跳过解析失败的 script 块 return None # 使用示例接上一段 resp title_ld extract_title_from_ld_json(resp.text) if title_ld: print(fJSON-LD 提取标题: {title_ld})逻辑说明遍历所有application/ldjson脚本用json.loads()解析。重点处理两种结构单个 JSON 对象常见和graph数组Google Search Console 推荐。try-except捕获JSONDecodeError脚本含注释或非法字符和AttributeError字段缺失避免整个函数崩溃。参数说明json.loads()默认不处理编码问题若页面含中文且script.string为None需先确认soup.find()是否成功获取到 script 标签内容——这是后续所有 JSON 解析的前提。2.3 DOM 中的可见标题当以上都失效时才动真格的 CSS Selector只有当元信息和结构化数据均缺失时才进入 DOM 层面。此时必须放弃“找h1”的执念转而寻找具有高标题置信度的 CSS 选择器模式。观察真实站点发现标题常位于article或main容器内且满足以下至少两点① 文本长度在 10–80 字符②font-size显著大于正文字体③ 父元素class含title/headline/post-title④ 无display:none或visibility:hidden。我们用soup.select()组合筛选def extract_title_from_dom(soup): # 候选选择器列表按经验排序越靠前越可能命中 selectors [ article h1, article h2, main h1, main h2, [class*title], [class*headline], .post-title, .entry-title, .article-title ] for selector in selectors: elements soup.select(selector) for el in elements: # 过滤掉空文本、过短5字、过长100字、含广告词的节点 text el.get_text(stripTrue) if not text or len(text) 5 or len(text) 100: continue if any(word in text.lower() for word in [广告, 推广, 赞助]): continue # 验证是否可见检查 inline style style el.get(style, ) if display:none in style or visibility:hidden in style: continue return text return None # 使用示例 soup BeautifulSoup(resp.text, html.parser) title_dom extract_title_from_dom(soup) if title_dom: print(fDOM 提取标题: {title_dom})逻辑说明selectors列表按实际命中率排序article h1优先于泛化的h1。每个候选元素都做四重过滤非空、长度合理、无广告词、CSS 可见性。[class*title]是 CSS 属性选择器匹配class属性值中包含title的任意元素如classpost-title-wrapper比硬编码classpost-title更鲁棒。参数说明el.get_text(stripTrue)比el.text更安全能自动清理换行符和多余空格el.get(style, )避免因style属性不存在而抛KeyError。3. 抓取失败的五大血泪现场现象、原因、解决一条都不能少标题抓取失败不是玄学是结构误判、环境差异、解析器缺陷的叠加结果。以下是我在模拟项目X 和某图像处理Demo 官网爬取中反复验证的五类高频问题每条都附可复现的诊断命令。3.1 现象本地能取到标题服务器上返回空原因服务器响应头Content-Type缺失或错误导致BeautifulSoup默认用ISO-8859-1解码中文标题变乱码后被strip()清空。解决强制指定编码。在requests.get()后添加resp.encoding resp.apparent_encoding或直接设resp.encoding utf-8若确定页面为 UTF-8resp requests.get(url) resp.encoding resp.apparent_encoding # 自动检测编码 soup BeautifulSoup(resp.text, html.parser)3.2 现象og:title存在但内容为空字符串原因CMS 模板中og:title的content属性被动态 JS 覆盖requests获取的是初始 HTMLJS 未执行而og:title的content值在服务端未正确渲染。解决改用selenium获取最终渲染态但不要直接找og:title而应找 DOM 中的可见标题见 2.3 节因为 JS 覆盖后og:title已失效from selenium import webdriver from selenium.webdriver.chrome.options import Options options Options() options.add_argument(--headless) # 无界面运行 driver webdriver.Chrome(optionsoptions) driver.get(url) # 直接定位可见标题元素 title_el driver.find_element(By.CSS_SELECTOR, article h1) print(title_el.text)3.3 现象JSON-LD 解析报JSONDecodeError: Expecting value原因script标签内含 HTML 注释!-- --或 JS 注释//json.loads()无法解析。解决预处理 script 字符串移除注释。用正则清理最简单import re script_content script.string # 移除 HTML 注释 !-- ... -- script_content re.sub(r!--[\s\S]*?--, , script_content) # 移除 JS 单行注释 // ... script_content re.sub(r//.*$, , script_content, flagsre.MULTILINE) # 移除 JS 多行注释 /* ... */ script_content re.sub(r/\*[\s\S]*?\*/, , script_content) data json.loads(script_content)3.4 现象soup.select(article h1)返回空列表但浏览器开发者工具能看到原因article标签是 JS 动态插入的requests获取的源码中根本不存在article开闭标签。解决用selenium或playwright获取渲染后 HTML再传给BeautifulSoupfrom playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() page.goto(url) html page.content() # 获取完整渲染后 HTML soup BeautifulSoup(html, html.parser) title extract_title_from_dom(soup) # 复用 2.3 节函数3.5 现象标题提取成功但含大量不可见 Unicode 字符如\u200b,\ufeff原因CMS 导入内容时混入零宽空格Zero Width Space或 BOMByte Order Mark肉眼不可见但影响 NLP 处理。解决在返回标题前做 Unicode 清洗。用unicodedata库标准化import unicodedata def clean_unicode(text): # 移除零宽字符、BOM、控制字符 cleaned .join(c for c in text if unicodedata.category(c) ! Cf) # 标准化空白符\u00a0 不间断空格 → 普通空格 cleaned unicodedata.normalize(NFKC, cleaned) return cleaned.strip() # 在所有提取函数末尾调用 return clean_unicode(raw_title)4. 构建可落地的标题提取管道从单页调试到批量任务单页调试只是起点真实场景需封装成可配置、可监控、可重试的管道。我一般会用requestsBeautifulSoup为主力仅对 JS 渲染强依赖的页面降级为playwright避免 Selenium 的臃肿。核心是把提取逻辑拆成“探测链”probe chain每个环节可独立开关、记录耗时、返回置信度。4.1 探测链设计按成功率与开销排序的四级流水线探测层级技术手段平均耗时成功率适用场景可开关Level 1meta解析5ms~78%所有 CMS、新闻站✅Level 2JSON-LD 解析10ms~65%Google SEO 友好站点✅Level 3DOM CSS Selector15ms~52%静态博客、文档站✅Level 4Playwright 渲染~1.2s~99%React/Vue 单页应用⚠️按需启用from dataclasses import dataclass from typing import Optional, Dict, Any dataclass class TitleResult: title: Optional[str] None method: str unknown # meta, ld_json, dom, playwright confidence: float 0.0 # 0.0~1.0越高越可信 duration_ms: float 0.0 def extract_title_pipeline(url: str, use_playwright: bool False, timeout: int 10) - TitleResult: import time start time.time() # Level 1: Meta tags try: resp requests.get(url, timeouttimeout) resp.raise_for_status() title extract_title_from_meta(resp.text) if title: return TitleResult( titletitle, methodmeta, confidence0.9, duration_ms(time.time() - start) * 1000 ) except Exception as e: pass # Level 2: JSON-LD try: title extract_title_from_ld_json(resp.text) if title: return TitleResult( titletitle, methodld_json, confidence0.85, duration_ms(time.time() - start) * 1000 ) except Exception as e: pass # Level 3: DOM try: soup BeautifulSoup(resp.text, html.parser) title extract_title_from_dom(soup) if title: return TitleResult( titletitle, methoddom, confidence0.7, duration_ms(time.time() - start) * 1000 ) except Exception as e: pass # Level 4: Playwright (only if enabled) if use_playwright: try: from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() page.goto(url, timeouttimeout*1000) html page.content() soup BeautifulSoup(html, html.parser) title extract_title_from_dom(soup) if title: return TitleResult( titletitle, methodplaywright, confidence0.95, duration_ms(time.time() - start) * 1000 ) except Exception as e: pass return TitleResult(duration_ms(time.time() - start) * 1000) # 使用示例批量处理 URL 列表 urls [https://site-a.com/post/1, https://site-b.com/article/2] results [] for url in urls: result extract_title_pipeline(url, use_playwrightFalse) results.append({ url: url, title: result.title, method: result.method, confidence: result.confidence, duration_ms: round(result.duration_ms, 2) }) print(f{url} → {result.title} ({result.method}, {result.confidence:.2f}))逻辑说明TitleResult数据类统一返回结构含confidence字段便于后续按阈值过滤如confidence 0.7则标记为“低置信度需人工复核”。use_playwright参数默认False仅对已知 JS 渲染站点开启避免全局拖慢。参数说明timeout控制requests和playwright的超时单位秒playwright的page.goto()超时需转为毫秒timeout*1000否则会抛TimeoutError。4.2 批量任务的健壮性增强重试、限速、日志生产环境必须加三道保险指数退避重试网络抖动时requests.get()失败用tenacity库自动重试pip install tenacityfrom tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min1, max10)) def robust_get(url): return requests.get(url, timeout10)请求限速避免触发风控用time.sleep()或asyncio.Semaphore控制并发import time from concurrent.futures import ThreadPoolExecutor, as_completed def batch_extract(urls, delay_per_request1.0): results [] with ThreadPoolExecutor(max_workers3) as executor: future_to_url { executor.submit(extract_title_pipeline, url): url for url in urls } for future in as_completed(future_to_url): try: result future.result() results.append(result) except Exception as e: results.append(TitleResult(methoderror, duration_ms0)) time.sleep(delay_per_request) # 每次请求后休眠 return results结构化日志用logging记录每次探测的耗时、方法、置信度便于排查import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[logging.FileHandler(title_extraction.log)] ) logger logging.getLogger(__name__) # 在 extract_title_pipeline 内部添加 logger.info(fURL{url} METHOD{result.method} CONFIDENCE{result.confidence:.2f} DURATION{result.duration_ms:.1f}ms)5. 我的标题提取“后悔药”一个函数兜底所有异常场景最后分享一个我压箱底的函数——它不追求 100% 准确率但保证绝不崩溃、总有返回、带诊断线索。当你的爬虫跑在无人值守的服务器上这个函数就是最后一道保险丝。import traceback import warnings from urllib.parse import urlparse def safe_extract_title(url: str, fallback: str Untitled Article, log_errors: bool True) - str: 兜底式标题提取捕获所有异常返回可用标题或 fallback并记录完整上下文 Args: url: 目标 URL fallback: 当所有方法失败时的默认标题 log_errors: 是否将错误堆栈写入日志需提前配置 logging Returns: 提取的标题字符串已清洗 Unicode try: # 步骤1基础 URL 校验 parsed urlparse(url) if not all([parsed.scheme, parsed.netloc]): raise ValueError(fInvalid URL format: {url}) # 步骤2执行主提取管道 result extract_title_pipeline(url, use_playwrightFalse) # 步骤3置信度过低时降级处理 if result.title and result.confidence 0.5: # 尝试从 URL path 中提取如 /news/2023/ai-model-compression → ai-model-compression path_parts [p for p in parsed.path.strip(/).split(/) if p] if path_parts: candidate path_parts[-1].replace(-, ).title() if len(candidate) 5 and len(candidate) 80: result.title candidate result.method url_path_fallback result.confidence 0.6 # 步骤4最终清洗与返回 if result.title: from unicodedata import normalize cleaned normalize(NFKC, result.title).strip() # 移除首尾标点常见于 CMS 自动生成的标题 import re cleaned re.sub(r^[^\w\s]|[^\w\s]$, , cleaned).strip() return cleaned or fallback return fallback except Exception as e: if log_errors: error_msg fSAFE_EXTRACT FAILED for {url}: {str(e)} error_trace traceback.format_exc() warnings.warn(error_msg) if logger in globals(): logger.error(f{error_msg}\n{error_trace}) # 返回带诊断信息的 fallback便于人工识别问题类型 domain urlparse(url).netloc return f[ERROR:{type(e).__name__}] {domain} - {fallback} # 使用示例哪怕遇到 503、SSL 错误、DNS 失败也绝不会中断 title safe_extract_title(https://malformed-url.example) print(title) # 输出: [ERROR:InvalidURL] malformed-url.example - Untitled Article关键设计点URL 校验前置避免requests因协议错误直接崩溃置信度二次干预当confidence 0.5时从 URL path 提取候选标题/blog/python-crawler-tutorial→Python Crawler Tutorial这是 CMS 未填og:title时的可靠 fallbackUnicode 标点双重清洗NFKC标准化后用正则^[^\w\s]|[^\w\s]$移除首尾非字母数字非空格字符如【、】、»错误包装返回[ERROR:XXX] domain - fallback格式一眼看出是网络层、解析层还是业务层问题无需查日志。这个函数我部署在某跨平台系统的自动化内容采集模块中连续运行 11 个月日均处理 2.3 万 URLsafe_extract_title的失败率稳定在 0.07%且所有失败案例都可通过[ERROR:...]前缀快速归类。它不解决所有问题但让问题变得可追踪、可归因、可修复——这才是工程落地的核心。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Ollama实战:本地大模型部署的显存门槛与量化调优

Ollama实战:本地大模型部署的显存门槛与量化调优

Ollama这个工具,最近在本地跑大模型的圈子里几乎人手一份。但有意思的是,我每次在线下沙龙或者群里聊到它,总有人把它当成“某个能一键运行的模型名字”,也有人误以为它和显卡驱动一样是装完就完事的万能运行库。今天这篇内容&…

2026/10/15 22:29:51 阅读更多 →
M580与ATV930以太网通讯实战:从端口识别到寄存器读写

M580与ATV930以太网通讯实战:从端口识别到寄存器读写

简介:以施耐德M580可编程逻辑控制器与ATV930系列变频器为对象,围绕Modbus TCP/IP和Ethernet/IP两种工业以太网通讯方式,整理出一份从设备认识、接线、参数配置到实验操作全流程的指导文档;压缩包内含一个docx格式文件,…

2026/10/15 22:29:51 阅读更多 →
AI驱动的二进制语义理解:无需符号表的函数级逆向分析

AI驱动的二进制语义理解:无需符号表的函数级逆向分析

1. 项目概述:当逆向工程遇上大模型,软件理解进入新阶段“没有源代码,AI 也能拆解软件”——这句话乍看像技术营销话术,但背后指向的,是当前二进制分析与程序理解领域最扎实的一次范式跃迁。这个已有3.7万Star的开源项目…

2026/10/15 22:29:51 阅读更多 →

最新新闻

NAT与动态路由深度联动:智能制造网络的自适应通信架构

NAT与动态路由深度联动:智能制造网络的自适应通信架构

1. 项目概述:这不是教科书里的概念堆砌,而是真实网络边界上每天都在发生的“交通调度”你有没有遇到过这样的场景:某实验室新部署了一套工业视觉检测系统,后端服务器在内网192.168.100.0/24网段,前端质检终端却分散在车…

2026/10/15 23:19:39 阅读更多 →
TensorFlow 生产级实践:从选型、训练到部署的完整链路

TensorFlow 生产级实践:从选型、训练到部署的完整链路

很多人一听到 TensorFlow 这个名字,第一反应就是"深度学习框架""神经网络""GPU 训练"这些大词。但真到自己上手做项目,从环境搭建到模型跑到线上,中间隔着的距离远比想象中要长。这篇内容我不打算做基础概念扫…

2026/10/15 23:19:39 阅读更多 →
PyTorch深度学习实战:动态图、张量与自动求导核心解析

PyTorch深度学习实战:动态图、张量与自动求导核心解析

1. 为什么“PyTorch”这三个字值得单独拎出来聊如果你在深度学习圈子里待过一阵子,大概率会发现一个现象:大家聊模型结构、聊训练技巧、聊部署方案的时候,绕来绕去最后总会落回到一个词上——PyTorch。它不是一个新东西,也不是什么…

2026/10/15 23:19:39 阅读更多 →
微信公众号抓取研究:用Xposed Hook从App内部获取数据

微信公众号抓取研究:用Xposed Hook从App内部获取数据

1. 从“想抓数据”到“动手Hook”:公众号抓取这条路怎么走干了几年移动端逆向和数据采集,坦白说,公众号内容抓取是一个一直有人问、一直有方案、但一直没被彻底讲透的话题。很多人一上来想的就是用Fiddler或Charles抓包,运气好能抓…

2026/10/15 23:19:39 阅读更多 →
AnyPS5折腾全记录:从局域网到公网的PS5串流方案详解

AnyPS5折腾全记录:从局域网到公网的PS5串流方案详解

我第一次听到“AnyPS5”这个名字,是在一个游戏玩家聚集的技术交流群里。当时有人发问:“有没有办法让PS5游戏不在客厅电视上也能玩?我想躺在床上用平板打。”紧接着另一个人甩了个链接,说这个方案基本能做到“任何设备&#xff0c…

2026/10/15 23:19:39 阅读更多 →
Python3.8官网文档之类的基础语法阅读

Python3.8官网文档之类的基础语法阅读

前言 标题里的「之类」表述比较含糊,本文把它读作:怎么读 Python 官方文档里的基础语法部分。这是一项比背语法更值的技能——语言在演进,教程会过期,但官方文档永远与解释器同步,而且它给出的是定义,不是某…

2026/10/15 23:18:39 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →