Scrapling 爬虫框架 10 分钟上手:静态抓取、动态渲染与反爬绕行完整指南
【免费下载链接】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 自适应爬虫框架,单次请求到大规模抓取共用一套 API:解析器能在页面改版后自动找回元素,内置浏览器 Fetcher 可绕开 Cloudflare 类反检测,适合需要写长期稳定爬虫的开发者。
一、先跑通:5 行代码抓出第一条数据
先拿正反馈,再谈原理。把下面这段保存为demo.py直接运行:
from scrapling.fetchers import Fetcher page = Fetcher.get("https://quotes.toscrape.com") for quote in page.css("div.quote"): print(quote.css("span.text::text").get(""))这段代码在干什么:Fetcher.get发一次 HTTP 请求(默认自动伪装成真实 Chrome 浏览器,不用额外配置),然后用 CSS 选择器把页面上所有引文文本抽出来。终端打印出一串引文,说明环境已经跑通。
想直接"爬整个站",Spider 体系 10 行就能起步:
from scrapling.spiders import Spider, Response class QuotesSpider(Spider): name = "quotes" start_urls = ["https://quotes.toscrape.com"] async def parse(self, response: Response): for quote in response.css("div.quote"): yield {"text": quote.css("span.text::text").get("")} QuotesSpider().start()start()内部处理全部异步调度,运行过程实时打印日志,结束后返回带完整统计(请求数、耗时、抓取条数)的CrawlResult对象。
二、它凭什么快又稳
三个点,点到为止:
- HTTP 层快且不易被识别。
Fetcher基于 curl_cffi,可用impersonate="chrome"伪造 TLS 指纹,让请求在协议层看起来就像真实 Chrome 发的。不渲染 JS 的页面别开浏览器,这是最快的路径。 - 解析器自带"GPS"。首次抓取时
page.css(".product", auto_save=True)记住元素的指纹,之后网站改了版式,page.css(".product", adaptive=True)能把元素重新找回来,你的选择器不用改。 - 规模化能力开箱即用。Spider 体系内置请求调度(Scheduler)、按域并发限制、自动限速和断点续跑(Checkpoint),不用自己造调度器。
三、按场景选写法:静态页、动态页、反爬各用什么
场景 1:静态页(关键数据就在 HTML 里)
from scrapling.fetchers import Fetcher page = Fetcher.get("https://example.com", impersonate="chrome") print(page.css("h1::text").get())适用边界:速度最快、内存占用最低;前提是页面首屏 HTML 里就有你要的数据,不依赖 JS 渲染。
场景 2:动态渲染(内容靠 JavaScript 生成)
from scrapling.fetchers import DynamicFetcher page = DynamicFetcher.fetch( "https://example.com", wait_selector=".product" )适用边界:它会真的启动一个 Chromium 并等目标元素出现后再返回,速度比纯 HTTP 慢,适合 JS 渲染页、小自动化和中小强度防护的站点。
场景 3:强反爬(Cloudflare Turnstile 等)
from scrapling.fetchers import StealthyFetcher page = StealthyFetcher.fetch( "https://example.com", headless=True, network_idle=True )适用边界:Playwright 指纹泄漏、canvas 噪声、无头模式检测这些反检测补丁在底层自动打好;代价是三者中最慢、内存占用最高——前两种 Fetcher 搞不定时再上它。
四、把量提上去:并发、自动限速与断点续跑
量级到千页以上时,把下面这些配置写进 Spider 类即可:
class BigSpider(Spider): name = "big" start_urls = [...] concurrent_requests = 16 # 全局并发,默认 4 concurrent_requests_per_domain = 4 # 单域并发上限 autothrottle_enabled = True # 开启自动限速 autothrottle_max_delay = 30.0AutoThrottle(自动限速)会盯着服务器实际响应速度,按域名独立调节延迟:快的站自动提速,遇到 429/403 则把该域延迟翻倍(0.5s → 1s → 2s → 4s…),恢复后自己降回来,download_delay这种拍脑袋的固定值可以省掉。
长时间任务务必开断点,随时可停可续:
spider = BigSpider(crawldir="crawl_data/big") result = spider.start() if result.paused: print("已暂停,重新运行即可从断点恢复")另外start(use_uvloop=True)可切换到更快的 uvloop 事件循环,对 I/O 密集型抓取有明显吞吐提升。完整参数与统计字段见 docs/spiders/advanced.md。
五、上手检查清单与 3 个高频坑
| 检查项 | 要求 / 操作 |
|---|---|
| Python 版本 | 3.10+(pyproject.toml中requires-python = ">=3.10") |
| 获取源码 | git clone https://gitcode.com/GitHub_Trending/sc/Scrapling |
| 安装依赖 | 项目根目录执行pip install -e . |
| 浏览器依赖 | 仅动态/反爬场景需要:scrapling install下载 Playwright 浏览器及指纹依赖 |
| CLI 交互 Shell | pip install "scrapling[shell]",之后运行scrapling shell |
🔧 三个最高频的坑:
- 报"找不到浏览器":用了
DynamicFetcher/StealthyFetcher却没装浏览器,先执行scrapling install再跑。 - adaptive 不生效:该功能默认关闭,必须先用
auto_save=True记录一次元素指纹,之后adaptive=True才有东西可"找回"。 - parse 写成普通
def:Spider 的回调必须是async def+yield的异步生成器,否则调度引擎不会拾取。
一句话收束:Scrapling 把"单请求、动态渲染、反爬绕行、并发抓取、断点续跑"压进了一个库,起步成本是 10 行代码。想深入参数细节,从官方文档 docs/fetching/choosing.md 的 Fetcher 选型表看起。
【免费下载链接】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),仅供参考