Scrapling 网页抓取快速上手指南:3 行代码从单页请求到整站爬取
【免费下载链接】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 网页抓取框架,从单个 HTTP 请求到整站爬取都能覆盖:解析器会记住选择器,页面改版后仍能自动定位元素;抓取器自带浏览器指纹伪装与反检测处理。下面按安装验证、取数、过反爬、应对改版、放大到整站爬取这条主线走一遍,最后收掉新手最常踩的几个坑。
一条命令装好并验证
官方要求 Python 3.10 以上。基础安装只包含解析引擎:
pip install scrapling python -c "import scrapling; print(scrapling.__version__)"要真正抓网页,还需要安装 Fetcher 组件并下载浏览器:
pip install "scrapling[fetchers]" scrapling install也可以从源码安装:克隆仓库(仓库地址:https://gitcode.com/GitHub_Trending/sc/Scrapling )后执行pip install -e .。注意scrapling install是最常被漏掉的一步,它负责下载浏览器及系统依赖,忘了执行是 StealthyFetcher 起不来的头号原因。
只解析本地 HTML?
如果只想解析已经下载好的 HTML 文件,上面第一条命令就够了,不需要装 fetchers。
3 行代码拿到第一份数据
核心机制一句话:抓取返回的Response对象本身就是Selector,抓完直接写 CSS 选择器。
from scrapling.fetchers import Fetcher page = Fetcher.get('https://quotes.toscrape.com') quotes = [q.css_first('span.text::text').get() for q in page.css('.quote')] print(quotes[:3], page.status)Fetcher基于 curl_cffi 发纯 HTTP 请求,不起浏览器,是速度最快的一档。它默认模仿真实浏览器的 TLS 指纹并生成真实请求头,很多会拦截脚本请求的站点在这里就能直接通过。需要带登录态、连续多次请求复用 cookie 时,改用FetcherSession,会话内共享 cookie 和连接池,单次请求还能单独覆盖配置。
目标是 JSON 接口怎么办
少写一行就能接住:
page = Fetcher.get('https://api.github.com/events') print(page.json())页面靠 JS 渲染或有反爬,怎么办
目标内容要等脚本执行后才出现,或者站点挂着 Cloudflare 这类挑战时,升级到浏览器抓取器:
from scrapling.fetchers import StealthyFetcher page = StealthyFetcher.fetch('https://protected-site.com', headless=True) print(page.css_first('h1::text').get())两档浏览器抓取器怎么选:DynamicFetcher是普通 Chromium/Chrome 自动化,适合轻量 JS 渲染页;StealthyFetcher是强化版,自动处理 Cloudflare Turnstile/Interstitial、WebRTC 泄漏、canvas 指纹、headless 检测等向量。headless默认为 True,调试阶段想观察浏览器行为时改成 False 即可。
从浏览器复制请求参数
如果 Chrome 里已经打开了目标页面,可以在开发者工具里把请求复制成 curl 命令,再把关键参数(header、cookie)转给 fetcher:
另可选装pip install "scrapling[shell]"获得scrapling shell交互式抓取环境,调试选择器时很方便。
网站改版后,选择器如何不失效
这是 Scrapling 的招牌能力——自适应解析。第一次选中元素时加auto_save=True保存其特征;站点改版导致选择器失配后,同一次选择加adaptive=True,它会按相似度找出对应元素,纯本地计算,不用 AI:
from scrapling import Selector page = Selector(html, adaptive=True, url='example.com') el = page.css('#p1', auto_save=True) # 第一次:记录元素特征 if not el: el = page.css('#p1', adaptive=True) # 改版后:自动重新定位对 fetcher 全局开启只需在请求前写一行Fetcher.adaptive = True。长期挂在定时任务上的爬虫最该开这个——站点前端改一次 class 名,管道不至于直接停摆。
从单页放大到整站爬取
规模从"一个页面"变成"整个站点"后,自己写请求循环很快会变得繁琐:并发、限速、代理轮换、断点续传都要管。spiders 模块把这些收进爬虫引擎,只声明起始地址和解析回调即可:
from scrapling.spiders import Spider, Response class QuoteSpider(Spider): name = "quotes" start_urls = ["https://quotes.toscrape.com/"] async def parse(self, response: Response): for item in response.css('.quote'): yield {"text": item.css_first('span.text::text').get()} QuoteSpider().start()Checkpoint 机制支持断点续爬:任务中途被中断,下次从最后一个检查点继续,不用从头再来:
最容易踩的三个坑
import scrapling.fetchers 报 ModuleNotFoundError?
基础包不含 fetcher。先执行pip install "scrapling[fetchers]",再跑一次scrapling install。
StealthyFetcher 打不开浏览器?
九成是浏览器依赖没下载,重跑scrapling install;环境异常时加--force强制重装。
返回 200 但选择器取不到东西?
先看page.status:403 说明请求层被拦,换浏览器抓取器;200 但取不到,多半是内容靠 JS 渲染,同样需要 DynamicFetcher 或 StealthyFetcher。
下一步:把示例里的 quotes.toscrape.com 换成实际目标站点,先用最快的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),仅供参考