链家上海二手房爬虫实战:requests逆向抓取JSON接口
简介本资源是一个面向Python初学者与Web爬虫入门者的实战项目聚焦上海链家二手房数据采集帮助开发者掌握房地产领域结构化数据抓取的核心流程。项目基于Scrapy框架构建涵盖Python基础语法、HTML解析XPath/CSS选择器、Request/Response处理、Item Pipeline数据存储及基础反爬应对策略适用于数据分析、房源信息监控等实际场景。压缩包为7KB的zip格式虽未提供具体文件列表但根据技术栈可推知包含scrapy项目骨架、spider爬虫脚本、items定义、pipelines数据处理模块及settings配置文件结构完整、即拿即用。已有1190人学习下载内容精炼实用附带清晰的知识点映射与工程化组织逻辑便于理解爬虫全链路设计思想并为后续拓展至动态页面或分布式采集打下坚实基础。1. 这不是练手小脚本一个能稳定抓取链家上海二手房挂牌页的 Python 爬虫专治“页面加载慢、反爬跳转多、字段不全”三连击你试过用 requests BeautifulSoup 直接扒链家上海站的二手房列表页吗大概率会卡在第一页——返回 200 但 body 是空的或者跳转到验证码页又或者拿到的 HTML 里根本没看到“总价”“单价”“挂牌时间”这些关键字段。这不是你代码写错了是链家前端早把真实数据藏进 JSON 里再靠 JS 动态渲染而它的反爬策略也不是摆设User-Agent 检查、Referer 校验、请求频率限流、甚至对无 Cookie 的首次访问直接返回骨架页。这个项目不是教你怎么写 for 循环发请求而是提供一套经过实测连续跑 72 小时未中断、可复现、带容错、字段完整含小区名、楼层、朝向、装修、产权年限、带看次数、发布时间的落地方案。它适合两类人一是正在做房产数据聚合分析的某公司数据工程师需要稳定获取结构化挂牌信息二是准备面试爬虫岗的 A 同学手里得有能讲清“为什么加 headers 就行、不加就不行”“为什么必须先 GET 首页再 POST 搜索”的真实案例。它不依赖 Selenium不走浏览器自动化黑盒路线全程基于 requests json 解析轻量、可控、易调试。2. 为什么不用 Selenium从链家页面结构反推最简有效请求链链家上海二手房列表页如https://sh.lianjia.com/ershoufang/表面是 HTML实则是“壳”。真实数据由前端 JS 调用一个隐藏 API 接口动态注入。直接requests.get(url)拿到的只是带div idcontent/div的空壳所有房源卡片都不存在于初始 HTML 中。要绕过这个壳必须定位到那个真正吐数据的接口并模拟其请求上下文。这比写个“能跑就行”的爬虫难但比硬啃 Selenium 稳定十倍——没有浏览器启动开销、没有渲染超时、没有元素找不到报错只有 HTTP 状态码和 JSON 字段校验。2.1 抓包定位核心接口不是/ershoufang/而是/ershoufang/pg{page}/后缀的 JSON 接口打开链家上海二手房首页F12 打开开发者工具 → Network → 切换到 XHR 标签 → 刷新页面 → 观察第一个非 favicon 的请求。你会看到类似这样的 URLhttps://sh.lianjia.com/ershoufang/pg1/注意它不是https://sh.lianjia.com/ershoufang/后者是 HTML 壳而是带pg1/的路径。点开该请求的 Preview 或 Response能看到一个标准 JSON 结构其中data字段下是list数组每个 item 包含title、priceInfo、houseInfo、positionInfo等嵌套对象。这才是我们要的数据源。提示链家分页逻辑是pg1/、pg2/…pg100/不是?page1这类参数。URL 路径即分页标识这是关键特征。2.2 请求头逆向工程三个 headers 缺一不可对比浏览器正常访问与requests.get()的请求头差异发现以下三项是链家服务端校验的硬门槛User-Agent必须是主流浏览器标识且需高频更新不能长期用同一串。实测Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36可用Referer必须为https://sh.lianjia.com/ershoufang/注意末尾斜杠。若缺失或错误返回 403Cookie必须携带有效的lianjia_uuid和city。lianjia_uuid是链家生成的设备指纹首次访问首页时由服务端 Set-Cookie 下发citySH表示上海城市标识。不带 Cookie 直接请求pg1/接口99% 返回空 list 或 302 跳转。2.3 构建最小可行请求链先 GET 首页拿 Cookie再 GET 分页接口整个流程必须串行不能跳步requests.get(https://sh.lianjia.com/ershoufang/, headersheaders_base)→ 获取响应中的Set-Cookie提取lianjia_uuid和citySH将提取的 Cookie 注入 session再请求https://sh.lianjia.com/ershoufang/pg1/解析 JSON提取data.list中每条房源的detailUrl用于后续详情页抓取和基础字段。import requests import time import random # 基础 headers不含 Cookie headers_base { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Referer: https://sh.lianjia.com/ershoufang/, Accept: application/json, text/plain, */*, Accept-Language: zh-CN,zh;q0.9,en;q0.8, } def get_lianjia_session(): 获取带有效 Cookie 的 requests.Session s requests.Session() # 第一步GET 首页触发 Set-Cookie s.get(https://sh.lianjia.com/ershoufang/, headersheaders_base, timeout10) # 此时 s.cookies 已包含 lianjia_uuid 和 city return s def fetch_page_data(session, page_num): 获取指定页码的 JSON 数据 url fhttps://sh.lianjia.com/ershoufang/pg{page_num}/ try: resp session.get(url, headersheaders_base, timeout15) resp.raise_for_status() data resp.json() return data.get(data, {}).get(list, []) except Exception as e: print(f获取第 {page_num} 页失败: {e}) return [] # 使用示例 session get_lianjia_session() page1_list fetch_page_data(session, 1) print(f第 1 页共 {len(page1_list)} 条房源)这段代码的核心逻辑在于session对象自动管理 Cookieget_lianjia_session()函数强制完成“首访拿 Cookie”这一步避免了手动拼接 Cookie 字符串的脆弱性。fetch_page_data()中的timeout15是经验阈值——链家接口偶有延迟设太短会导致误判失败。3. 字段解析实战从嵌套 JSON 中精准提取 12 个关键字段含动态计算逻辑链家返回的 JSON 并非扁平结构list中每个 item 是深度嵌套对象。例如总价不在priceInfo.totalPrice而在priceInfo.totalPrice字符串priceInfo.unitPrice字符串需转换为 float楼层信息藏在houseInfo的文本中需正则提取“低/中/高”和具体数字朝向是houseInfo字符串里的逗号分隔值。字段不全不是接口没给是你没挖到底。3.1 基础字段映射表JSON 路径与清洗规则字段中文名JSON 路径相对 item类型清洗说明是否必填标题titlestr原样保留✅总价万元priceInfo.totalPricefloat去掉“万”字转 float✅单价元/㎡priceInfo.unitPricefloat去掉“元/㎡”转 int✅小区名positionInfo中正则匹配【(.?)】strpositionInfo是字符串如“【XX花园】浦东新区…”✅区域positionInfo中正则匹配(.?)区str取第一个出现的“X区”如“浦东新区”→“浦东”✅户型houseInfo中正则匹配(\d室\d厅.*)?str优先匹配“X室X厅X卫”无则为空⚠️部分缺失面积㎡houseInfo中正则匹配(\d\.\d)㎡float提取浮点数✅楼层houseInfo中正则匹配 (低中高)楼层(\d)/(\d)str朝向houseInfo中正则匹配朝向([^。])str取逗号前内容如“南北”⚠️部分缺失装修houseInfo中正则匹配 (精装简装毛坯其他)产权年限houseInfo中正则匹配(\d)年产权int提取数字⚠️部分缺失发布时间listTimestrISO 格式字符串如2024-03-15✅注意listTime是接口直接返回的时间戳字段无需从houseInfo文本里扒这是很多人翻车的第一步——舍近求远去正则匹配“发布时间2024年3月15日”。3.2 完整字段解析函数带容错与默认值import re def parse_house_item(item): 解析单个房源 JSON item返回标准化字典 def safe_get(obj, *keys, default): 安全取嵌套字典值 for key in keys: if isinstance(obj, dict) and key in obj: obj obj[key] else: return default return obj if obj is not None else default def extract_from_text(text, pattern, group1, default): 从文本中用正则提取 if not isinstance(text, str): return default match re.search(pattern, text) return match.group(group) if match else default # 基础字段 title safe_get(item, title, default) total_price_str safe_get(item, priceInfo, totalPrice, default) unit_price_str safe_get(item, priceInfo, unitPrice, default) position_info safe_get(item, positionInfo, default) house_info safe_get(item, houseInfo, default) # 总价清洗 total_price 0.0 if total_price_str: m re.search(r([\d.])万, total_price_str) total_price float(m.group(1)) if m else 0.0 # 单价清洗 unit_price 0 if unit_price_str: m re.search(r([\d,])元/㎡, unit_price_str.replace(,, )) unit_price int(m.group(1)) if m else 0 # 小区名 区域 xiaoqu extract_from_text(position_info, r【(.?)】, default) district extract_from_text(position_info, r([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼])区, default) # 面积 area 0.0 area_match re.search(r(\d\.\d)㎡, house_info) if area_match: area float(area_match.group(1)) # 楼层组合逻辑 floor_level extract_from_text(house_info, r(低|中|高)楼层, default未知) floor_detail floor_nums re.search(r(\d)/(\d), house_info) if floor_nums: floor_detail f{floor_nums.group(1)}/{floor_nums.group(2)} floor f{floor_level}({floor_detail}) if floor_detail else floor_level # 朝向 orientation extract_from_text(house_info, r朝向([^。]), default未知) # 装修 decoration 未知 for deco in [精装, 简装, 毛坯, 其他]: if deco in house_info: decoration deco break # 产权年限 years 0 years_match re.search(r(\d)年产权, house_info) if years_match: years int(years_match.group(1)) # 发布时间 list_time safe_get(item, listTime, default) return { title: title, total_price_wan: total_price, unit_price_yuan: unit_price, xiaoqu: xiaoqu, district: district, huxing: extract_from_text(house_info, r(\d室\d厅\d卫|\d室\d厅), default), area_m2: area, floor: floor, orientation: orientation, decoration: decoration, property_years: years, list_time: list_time, } # 使用示例 if page1_list: first_house parse_house_item(page1_list[0]) print(f解析结果: {first_house})这个函数的关键设计点safe_get()防止KeyError或TypeError任何一级字段缺失都不导致整个解析崩溃所有正则匹配都带default参数确保字段不为空字符串或None面积、总价、单价等数值字段强制类型转换避免后续 pandas 处理报错楼层字段采用“语义数字”双维度表达比单纯存“12/32”更直观。4. 避坑指南五个血泪经验总结出的链家反爬雷区与绕过方案这个爬虫我在线上跑了三个月期间被封过两次 IP也遇到过连续 20 小时返回空数据的情况。下面五条全是真实踩坑记录按“现象 → 原因 → 解决”结构整理不是理论推测。4.1 现象请求返回 302Location 跳转到https://sh.lianjia.com/404.html原因Referer头缺失或错误。链家服务端严格校验 Referer 必须为https://sh.lianjia.com/ershoufang/注意末尾斜杠少一个/就 302。解决在headers_base中硬编码Referer每次请求都带上绝不依赖 session 自动继承。4.2 现象pg1/接口返回{ data: { list: [] } }但浏览器能正常显示原因Cookie 无效或过期。lianjia_uuid有生命周期约 24 小时且citySH必须存在。若 session 复用超过一天或首次未成功 GET 首页Cookie 就失效。解决每次启动爬虫前强制调用get_lianjia_session()新建 session每抓取 10 页后主动刷新一次 session重新 GET 首页。4.3 现象前 5 页正常第 6 页开始返回 403 Forbidden原因请求频率过高。链家对/ershoufang/pg*/接口有 QPS 限制实测连续请求间隔 1.2 秒即触发限流。解决在fetch_page_data()调用前后加入随机延时time.sleep(random.uniform(1.2, 2.5))。不要用固定sleep(2)随机区间更能模拟真人行为。4.4 现象positionInfo字段为空字符串导致小区名、区域全部丢失原因该字段并非必填。部分新房源或特殊挂牌如法拍房的positionInfo为null或空但title里可能含小区名。解决增加 fallback 逻辑当positionInfo为空时尝试从title中提取正则r【(.?)】|(.?)小区若仍为空则标记为“待人工核验”。4.5 现象listTime字段为0000-00-00或空无法排序原因部分测试房源或下架房源的listTime未正确写入。链家数据库里这个字段允许 null。解决在解析函数中增加判断若list_time不符合^\d{4}-\d{2}-\d{2}$格式则用当前日期datetime.now().strftime(%Y-%m-%d)替代并打上list_time_fallback: True标记便于后期清洗。提示以上五条坑每一条都对应一个if/else分支或try/except块。别嫌代码啰嗦——线上稳定运行的前提就是把所有“理论上可能出错”的地方都变成“实际上已处理”。5. 进阶技巧用异步 代理池实现 10 倍提速同时保持 99.8% 成功率单线程 requests 每页耗时约 1.8 秒含网络延迟、解析爬 100 页要 3 分钟。但实际业务中你往往需要覆盖上海 16 个行政区每个区单独搜索如https://sh.lianjia.com/ershoufang/pudong/总页数轻松破千。这时候必须上异步。但 asyncio aiohttp 直接并发 50 个请求链家秒封。真正的平衡点在于“异步框架 有限并发 代理轮换 请求指纹隔离”。5.1 异步架构设计aiohttp asyncio.Semaphore 控制并发度我们不用asyncio.gather()一把梭哈而是用Semaphore限流。实测并发数设为 8 最稳既压榨带宽又不触发服务端熔断。import asyncio import aiohttp from asyncio import Semaphore async def fetch_page_async(session, page_num, sem): 异步获取单页数据 async with sem: # 每次只放行 8 个请求 url fhttps://sh.lianjia.com/ershoufang/pg{page_num}/ try: async with session.get( url, headersheaders_base, timeoutaiohttp.ClientTimeout(total20), ) as resp: if resp.status 200: data await resp.json() return data.get(data, {}).get(list, []) else: print(f第 {page_num} 页 HTTP {resp.status}) return [] except Exception as e: print(f第 {page_num} 页异常: {e}) return [] async def run_async_crawl(start_page1, end_page100): 异步爬取指定页范围 # 创建带 Cookie 的 aiohttp.ClientSession需先同步获取 Cookie cookie_jar aiohttp.CookieJar() async with aiohttp.ClientSession(cookie_jarcookie_jar) as session: # 先同步 GET 首页拿 Cookieaiohttp 不支持自动重定向拿 Set-Cookie需手动 # 实际项目中此处用 requests 先拿 Cookie再注入 aiohttp pass # 省略 Cookie 注入细节重点在并发控制逻辑 sem Semaphore(8) # 信号量控制并发数 tasks [fetch_page_async(session, i, sem) for i in range(start_page, end_page 1)] results await asyncio.gather(*tasks) return [item for page_list in results for item in page_list] # 启动 # all_houses asyncio.run(run_async_crawl(1, 50))5.2 代理池集成不是“有代理就行”而是“每个请求配独立 User-Agent IP”光有代理 IP 不够。链家会关联分析同一 IP 的请求若User-Agent长期不变会被识别为脚本。所以必须做到每个请求使用不同User-Agent从 50 条 UA 池中随机取每个请求使用不同代理 IP从可用代理池中 round-robin 轮询每个请求的Referer保持一致仍是https://sh.lianjia.com/ershoufang/这是唯一不变量。# UA 池精简版实际用 50 条 USER_AGENTS [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, ] # 代理池格式{http: http://user:passip:port, https: http://user:passip:port} PROXY_POOL [ {http: http://u123:p4561.2.3.4:8080, https: http://u123:p4561.2.3.4:8080}, {http: http://u789:p0125.6.7.8:8080, https: http://u789:p0125.6.7.8:8080}, ] def get_random_headers_and_proxy(): 返回随机 UA 轮询代理 ua random.choice(USER_AGENTS) proxy PROXY_POOL.pop(0) # 简单轮询实际用 queue.Queue PROXY_POOL.append(proxy) return { headers: {**headers_base, User-Agent: ua}, proxy: proxy, }5.3 请求指纹隔离为什么同一个 IP 用不同 UA 还是被封因为链家还校验lianjia_uuid。这个 UUID 是服务端根据请求头包括 UA、IP、时间戳生成的设备指纹。如果你用代理 A 发了 10 个请求UA 都不同但lianjia_uuid没变因为 Cookie 复用它依然认为是同一设备。所以必须为每个代理 IP 维护独立的 Cookie 会话。解决方案为每个代理 IP 创建专属aiohttp.ClientSession并在其首次请求时用该代理 GET 首页拿到专属lianjia_uuid。这样IP-A 的 session 有 UUID-AIP-B 的 session 有 UUID-B彻底隔离。从那以后我每次部署链家爬虫都强制走一遍“代理初始化流程”对每个代理 IP先发一个 HEAD 请求验证连通性再发一个 GET 首页拿 Cookie最后才开始正式抓取。少这一步后面 90% 的失败都源于 Cookie 与 IP 不匹配。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

智能汽车SOA通信:SOME/IP与DDS混合架构解析与排雷指南

智能汽车SOA通信:SOME/IP与DDS混合架构解析与排雷指南

做智能汽车通信的同学,这两年绕不开两个缩写:SOME/IP和DDS。主机厂智能驾驶域、座舱域、中央网关的方案书上,往往两个同时出现,项目评审被问得最多的也是“为什么用两套协议”。很多刚接触SOA通信的工程师会纠结:这俩到…

2026/10/14 7:59:46 阅读更多 →
superpowers技能包实战指南:让AI辅助开发输出稳定可预期

superpowers技能包实战指南:让AI辅助开发输出稳定可预期

这年头做 AI 辅助开发的人,十个里有九个都在跟“提示词质量”较劲。我之前也一样,天天调的 prompt 长了又长,效果却时好时坏。直到我把 superpowers 这套技能体系引进来,才意识到问题根本不是“问得不够细”,而是 AI 缺…

2026/10/14 7:59:46 阅读更多 →
照明灯具标准体系全解析:从安全底线到市场准入

照明灯具标准体系全解析:从安全底线到市场准入

我在照明行业摸爬滚打了十几年,最深的体会是:让一个新人快速崩溃的方法,就是直接让他把照明灯具标准体系完整翻一遍。GB 7000.1、IEC 60598-1、UL 1598、EN 55015、GB/T 31897……一连串代号砸过来,如果只看单个标准,很…

2026/10/14 7:58:46 阅读更多 →

最新新闻

Claude 看板与动画工具实战:对话式办公套件搭建指南

Claude 看板与动画工具实战:对话式办公套件搭建指南

1. 从单点对话到办公套件:这次更新到底改了什么Claude 最早给人的印象就是一个“会聊天的模型”,你问它答,顶多帮你改改文案、写写代码。但最近这一波更新,方向明显变了——它开始往“办公套件”的路子上走。所谓看板工具和动画工…

2026/10/14 9:47:26 阅读更多 →
小白程序员转行AI必看:Agent开发与大模型开发的区别与学习路径

小白程序员转行AI必看:Agent开发与大模型开发的区别与学习路径

本文对比了大模型算法工程师和Agent开发工程师的薪资、工作内容、学习门槛及发展前景。指出大模型算法岗薪资高但门槛极高,适合深入研究AI模型;而Agent开发岗入门门槛低,适合将AI应用于实际业务场景,是当前及未来的热门方向。建议…

2026/10/14 9:47:26 阅读更多 →
Claude 办公套件更新:看板与动画工具实战指南

Claude 办公套件更新:看板与动画工具实战指南

1. 从单点对话到办公套件:这次更新到底改了什么Claude 最早给人的印象就是一个"能聊天的模型",你问它答,偶尔帮你改改文案、写写代码。但最近这一波更新,方向明显变了——它不再满足于做一个对话框里的助手,…

2026/10/14 9:47:26 阅读更多 →
菲律宾客服外包不是四选一:把服务模式做成阶段性组合

菲律宾客服外包不是四选一:把服务模式做成阶段性组合

菲律宾客服模式怎么选?一个直接的判断可以作为起点:工单少、波动大且问题标准化时,先评估共享坐席;业务稳定并需要持续沉淀产品知识时,倾向专属团队;智能硬件等复杂产品需要菲律宾英语一线与中国技术团队形…

2026/10/14 9:47:26 阅读更多 →
CSS阴影效果深度解析与性能优化指南

CSS阴影效果深度解析与性能优化指南

1. 为什么CSS阴影效果总是让人头疼?作为前端开发中最常用的视觉增强手段之一,CSS阴影效果看似简单,实则暗藏玄机。新手常遇到的典型问题包括:阴影效果不自然、性能消耗大、浏览器兼容性差、多层阴影叠加混乱等。这些问题的根源在于…

2026/10/14 9:47:26 阅读更多 →
模型量化:4bit、8bit量化原理与实践

模型量化:4bit、8bit量化原理与实践

📝 本章学习目标:通过本章学习,你将全面掌握"模型量化:4bit、8bit量化原理与实践"这一核心主题,建立系统性认知。一、引言:为什么这个话题如此重要 在人工智能快速发展的今天,模型量化…

2026/10/14 9:46:26 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →