ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Scrapling 爬虫框架入门:3 行代码搞定静态抓取、JS 渲染与 Cloudflare 验证

Scrapling 爬虫框架入门:3 行代码搞定静态抓取、JS 渲染与 Cloudflare 验证 Scrapling 爬虫框架入门3 行代码搞定静态抓取、JS 渲染与 Cloudflare 验证【免费下载链接】Scrapling️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Dont be shy, join here: https://discord.gg/EMgGbDceNQ项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling上周我在抓一个商品价格列表站点悄悄改了 class 名脚本从当天开始只输出空字符串两百个写死的选择器里哪个死了得一个个翻。后来我换成 Scrapling它是一个 Python 网页抓取框架把发普通请求、跑 JS 渲染、过 Cloudflare 验证这几类活儿装进同一套接口解析器还能在页面改版后按内容特征重新定位元素你不用再在 requests、Playwright 和一堆补丁脚本之间来回切换。 Scrapling 是什么三种抓取器怎么选Scrapling 把抓取分成三档全部从同一个scrapling.fetchers模块导入返回的都是同一个可直接选元素的 Response 对象类定位相对速度适合场景Fetcher纯 HTTP 请求底层 curl_cffi最快内容就在 HTML 里的静态页DynamicFetcher无头 Chromium 渲染中JS 渲染采集的页面StealthyFetcher无头浏览器 反检测中Cloudflare 等强反爬站点三档在速度、反检测等级、内存占用上的完整对照表见 docs/fetching/choosing.md。 安装验证两分钟跑通第一个请求要求 Python 3.10 以上。装 fetchers 依赖再下载浏览器运行环境pip install scrapling[fetchers] scrapling install第二条命令负责下载 Chromium 等浏览器及其系统依赖只装解析器的话浏览器类抓取器会缺依赖。最小可运行示例from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com) print(page.status) print(page.css(.quote .text::text).get())page.status打印 HTTP 状态码 200css(...).get()返回第一条匹配的文本内容。注意拿到的page对象自带选择能力HTML 到手后直接选元素不用再转 BeautifulSoup。 核心能力演示JS 渲染采集无头浏览器加载内容靠前端脚本生成时换DynamicFetcher它开一个真实 Chromium 渲染完再交给你from scrapling.fetchers import DynamicFetcher page DynamicFetcher.fetch(https://quotes.toscrape.com/js/, network_idleTrue) print(page.css(.quote .text::text).getall()[:2])network_idleTrue表示等页面至少 500ms 内没有网络活动才返回避免拿到加载中的空壳也可以改用wait_selector.quote等某个元素出现。参数清单见 docs/fetching/dynamic.md。站点改版自适应定位重新找回元素选择器写死后最怕改版。第一次抓取时加auto_saveTrue记住元素特征改版后再加adaptiveTrue它会按相似度重新找到同一个元素products page.css(.product, auto_saveTrue) # 首次保存特征 # 站点改版后 products page.css(.product, adaptiveTrue) # 按相似度重新定位第一次选中的元素特征会被记住之后选择器失效时按相似度最高者重新定位不用 AI 介入。存储与定位原理见 docs/parsing/adaptive.md。Cloudflare 验证绕过StealthyFetcher目标站挂了 Cloudflare 人机验证时用StealthyFetcher。它的反检测是默认开启的Playwright 指纹被移除、canvas 操作加了噪声、WebRTC 本地 IP 泄漏被封住solve_cloudflareTrue则让它先自动解掉验证挑战再返回页面from scrapling.fetchers import StealthyFetcher page StealthyFetcher.fetch(https://target-site.com, solve_cloudflareTrue) print(page.status)验证通过后page.status应为 200。屏蔽广告域、走代理、时区伪装等完整选项见 docs/fetching/stealthy.md。️ 常见问题排查import Fetcher 报 ModuleNotFoundError默认pip install scrapling只带解析器。补装scrapling[fetchers]并执行scrapling install。动态页拿到的文本为空浏览器在脚本跑完前就交回了 HTML。加network_idleTrue或用wait_selector等关键元素出现。改版后 css 选择器返回 None纯路径匹配已失效。首次用auto_saveTrue存特征之后用adaptiveTrue重新定位。️ 进阶从单页请求到批量爬虫单页试通之后规模化交给 Spider 框架写一个类声明start_urls和parse回调并发、限速、断点续抓都由框架管from scrapling.spiders import Spider, Response class DemoSpider(Spider): name demo start_urls [https://quotes.toscrape.com] async def parse(self, response: Response): yield {text: response.css(.quote .text::text).get()}实例化时传crawldir./crawl_data按 CtrlC 会优雅暂停并存档重跑同一参数即从断点恢复限速、代理轮询和 robots.txt 检查也内置在框架里。写法和模板见 docs/spiders/getting-started.md。从你手头最难受的那个页面开始先用Fetcher.get确认内容在不在 HTML 里不在就换DynamicFetcher再不行上StealthyFetcher。三行代码就能判断该用哪一档别一上来就开浏览器。【免费下载链接】Scrapling️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Dont be shy, join here: https://discord.gg/EMgGbDceNQ项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进