尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Scrapling 网页抓取框架实战指南:一个库搞定从单页请求到全站爬取

Scrapling 网页抓取框架实战指南:一个库搞定从单页请求到全站爬取 Scrapling 网页抓取框架实战指南一个库搞定从单页请求到全站爬取【免费下载链接】Scrapling️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling如果你写爬虫最头疼的是页面一改版选择器全废和请求一发出就被拦Scrapling 值得放进你的工具箱。它是一个自适应的 Python 智能爬虫框架解析器能记住元素的特征、在网页结构变化后自动重新定位内置的 Fetcher 可以直接过掉 Cloudflare 一类反爬验证Spider 框架则支持并发、断点续爬和代理轮换。下面不讲概念直接带你把它装起来、跑起来。目标网站长什么样决定你选哪个 FetcherScrapling 把怎么把页面拿到手拆成了三个档位对应三种难度的网站选错档位要么浪费资源要么根本拿不到数据Fetcher/FetcherSession—— 纯 HTTP 请求速度最快。支持伪装成 Chrome、Firefox 等浏览器的 TLS 指纹impersonatechrome还能开 HTTP/3。静态页面、接口类数据用它就够。DynamicFetcher/DynamicSession—— 起一个真实的 Chromium 或 Chrome 做浏览器自动化适合 JS 渲染、需要点击等待的页面。StealthyFetcher/StealthySession—— 在动态浏览器的基础上加上指纹伪造与隐身处理能直接解 Cloudflare Turnstile / Interstitial专治被识别为机器人。三档都同时提供同步和异步写法也都有 Session 版本可以跨请求保留 Cookie 和登录态。更细的参数可以看 docs/fetching/ 里的static.md、dynamic.md、stealthy.md三篇文档。环境要求与安装Python 3.10 起步先确认 Python 版本python --versionScrapling 要求Python 3.10低于这个版本直接换环境。安装分两种姿势只要解析器本地已有 HTML 想提取数据、或配合自己已有的请求方案pip install scrapling要联网抓取用到scrapling.fetchers或scrapling.spiderspip install scrapling[fetchers] scrapling install注意一个容易踩的点第一条pip install scrapling只装了解析引擎此时 importscrapling.fetchers会报ModuleNotFoundError。第二条装完依赖后scrapling install负责下载浏览器及其系统依赖——Fetcher本身不需要浏览器但StealthyFetcher/DynamicFetcher必须有这一步。另外还有两个可选包scrapling[shell]提供交互式 Shell 和extract命令行提取scrapling[ai]提供 MCP 服务器让 AI 辅助抓取一次装全用scrapling[all]。不想折腾本地环境的话也可以直接拉官方 Docker 镜像pyd4vinci/scrapling浏览器和全部组件都内置好了。第一个抓取任务三步拿到数据装好后写个最小脚本目标是 quotes.toscrape.com官方练习站点from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com/) quotes page.css(.quote .text::text).getall() print(len(quotes), quotes[0])跑完应该看到10 The world as we have created it...这样的输出——第一条是本页名言数量10 条后面是第一条名言原文。拿到的page对象是个解析器选择方式比传统工具多CSSpage.css(.quote)、XPathpage.xpath(//div[classquote])、类 BeautifulSoup 的find_all、按文本找find_by_text都可以混用还支持.parent、.next_sibling这类 DOM 导航。想不联网本地练手直接把 HTML 字符串丢给解析器就行from scrapling.parser import Selector page Selector(htmldiv classquotespanhi/span/div/html) print(page.css(.quote span::text).get()) # 输出 hi被拦了怎么办换隐身 Fetcher如果Fetcher请求返回 403、重定向到验证页、或者正文是空的 JS 壳就升到对应档位。先确认页面到底是要浏览器还是有反爬前者用DynamicFetcher后者用StealthyFetcherfrom scrapling.fetchers import StealthyFetcher page StealthyFetcher.fetch( https://nopecha.com/demo/cloudflare, headlessTrue, solve_cloudflareTrue, ) print(page.css(#padded_content a)) # 拿到验证页内的链接列表如果目标是 Cloudflare 演示页跑完应该看到#padded_content里的链接被正常解析出来而不是卡在一页Checking your browser。solve_cloudflareTrue是让它自动过验证的关键参数。需要连续访问受保护页面时把一次性请求换成 Session 版本浏览器只开一次、验证只过一次from scrapling.fetchers import StealthySession with StealthySession(headlessTrue, solve_cloudflareTrue) as session: page session.fetch(https://nopecha.com/demo/cloudflare)另外两个实用开关给浏览器 Fetcher 传capture_xhr加一个 URL 模式页面加载时匹配的 XHR/fetch 响应会收进response.captured_xhr等于免逆向直接拿网站自己的 API 数据代理池场景用内置的ProxyRotator支持轮询和自定义轮换策略还能按请求单独覆盖代理。网站改版也不怕自适应解析这是 Scrapling 的核心卖点。传统做法是css(.product)写死选择器官网一改 class 名脚本集体阵亡。Scrapling 的解析器可以给元素打指纹from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com/) quotes page.css(.quote, auto_saveTrue) # 第一次保存元素特征之后网站改版导致.quote失效时不用重写选择器而是问它帮我找回来quotes page.css(.quote, adaptiveTrue) # 按相似度在改版页面上重新定位配合element.find_similar()找出页面里和某元素长得像的其余元素以及自动选择器生成功能定位一个 → 找到它的所有兄弟这种常见套路几行就能搞定。想深入了解这套机制可以读 docs/parsing/adaptive.md 和 docs/parsing/selection.md如果是从 BeautifulSoup 迁过来的docs/tutorials/migrating_from_beautifulsoup.md 有逐项对照。要爬整个站用 Spider 框架起并发任务单页抓取之外Scrapling 内置了一套 Scrapy 风格的爬虫框架。看这张架构图能明白各组件分工Scheduler 管理请求队列Crawler Engine 控制并发Session Manager 负责按 ID 路由到不同的会话同一个爬虫里普通页面走快速 HTTP 会话受保护页面自动切到隐身浏览器会话Checkpoint 系统则支持按 CtrlC 优雅暂停、下次从断点续爬。最小可运行的爬虫from scrapling.spiders import Spider, Response class QuotesSpider(Spider): name quotes start_urls [https://quotes.toscrape.com/] concurrent_requests 10 async def parse(self, response: Response): for quote in response.css(.quote): yield {text: quote.css(.text::text).get()} next_page response.css(.next a) if next_page: yield response.follow(next_page[0].attrib[href]) result QuotesSpider().start() result.items.to_json(quotes.json)跑完终端会打印实时统计本地生成quotes.json里面是分页抓下来的全部名言——翻页逻辑就是response.follow这一行。需要断点续爬时启动改成QuotesSpider(crawldir./crawl_data).start()中途 CtrlC 不会丢进度。不想自己写循环的还有一批现成模板CrawlSpider按规则跟链接、SitemapSpider吃 sitemap、ShopifySpider直接拉 Shopify 商店全部商品每个变体一条源码在 scrapling/spiders/templates/。结果导出除了to_json()还有to_jsonl()、to_csv()、to_xml()直接对接下游。不写代码的兜底命令行直接提取有时候只是把这个页面的正文存下来写脚本都嫌重。装上scrapling[shell]后可以在终端零代码完成scrapling extract get https://example.com content.md按输出文件后缀决定格式.txt出纯文本、.md出 Markdown、.html出原始 HTML还能加--css-selector只提取指定区域、--impersonate chrome伪装指纹动态页面换成scrapling extract fetch受 Cloudflare 保护的页面用scrapling extract stealthy-fetch ... --solve-cloudflare。再往前一步是交互 Shellscrapling shell它内置了 curl 命令转 Scrapling 请求这类快捷工具调试选择器时比开脚本快得多。两个命令的完整参数见 docs/cli/overview.md。下一步可以探索什么AI 协作装上scrapling[ai]后启动内置 MCP 服务器把抓取能力交给 Claude / Cursor 这类 Agent还能跨调用保持浏览器会话文档在 docs/ai/mcp-server.md。Scrapy 存量项目不用迁移给现有回调加一个scrapling_response装饰器就能用 Scrapling 解析器处理 Scrapy 拿到的响应参考 docs/integrations/scrapy.md。API 细节Fetcher 全家参数、Response 对象、选择器方法逐一看 docs/api-reference/fetchers.md 和 docs/api-reference/selector.md想复现文中的流程agent-skill/Scrapling-Skill/examples/ 里有从基础会话到完整爬虫的五个示例文件。性能解析器的速度对比可以跑根目录的 benchmarks.py 自己验证。【免费下载链接】Scrapling️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表