ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Scrapling Python 爬虫框架完整指南:从单页请求到自适应抓取

Scrapling Python 爬虫框架完整指南:从单页请求到自适应抓取 Scrapling Python 爬虫框架完整指南从单页请求到自适应抓取【免费下载链接】Scrapling️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!项目地址: https://gitcode.com/GitHub_Trending/sc/ScraplingScrapling 是一个自适应 Python 网络爬虫框架它的解析器能记住元素特征网站改版后自动把page.css()重新指向正确位置它的三个 Fetcher 分别覆盖纯 HTTP、动态加载页面和反爬站点它的 Spider 则把多页并发抓取、断点续爬、结果导出压进几行代码里。下面按先跑通、再抗改版、后放大到整站的顺序带你上手。装好依赖并跑通第一条抓取命令Scrapling 需要 Python 3.10 以上。直接pip install scrapling只装了解析引擎scrapling.fetchers和scrapling.spiders都还会抛ModuleNotFoundError——所以想发请求的话一步装全最省事pip install scrapling[all] scrapling install第二条命令会下载 Chromium、Chrome 的浏览器依赖和指纹相关组件装完后任何 Fetcher 都开箱可用。验证是否装好跑下面这段——它用 HTTP 请求抓取名言练习站并取出前两条名言Fetcher.get默认就带真实浏览器请求头from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com/) quotes page.css(.quote) print(page.status, len(quotes)) for q in quotes[:2]: print(q.css(.text::text).get(), —, q.css(.author::text).get())预期输出状态码20010每页 10 条名言随后是形如The world as we have created it... — Albert Einstein的名言行。page变量里就是Response对象它本身也是解析器.status、.headers、.cookies随时可查。动态页面交给浏览器 Fetcher 执行上面这条路径走的是纯 HTTP遇到 JS 渲染出来的内容就是空壳。换到DynamicFetcher它会起一个无头浏览器headless默认开启省得窗口弹出来抢屏幕把页面完整渲染后再交给你from scrapling.fetchers import DynamicFetcher page DynamicFetcher.fetch(https://quotes.toscrape.com/js/) print(len(page.css(.quote)))预期看到10——同样的选择器静态请求拿到的是空列表浏览器执行后才渲染出内容。场景用哪个特点纯静态页面、大批量Fetcher最快、最省内存可伪装 TLS 指纹JS 渲染、中小保护DynamicFetcherPlaywright 驱动 Chromium 或真实 ChromeCloudflare Turnstile 等强反爬StealthyFetcher自动过验证码、隐藏 WebRTC/CDP 痕迹被 Cloudflare 拦住的站点换成StealthyFetcher.fetch(url, solve_cloudflareTrue)即可参数名和用法与上面一致不用换解析代码。用自适应抓取让选择器活过网站改版这是 Scrapling 最省维护成本的部分。流程是第一次选到元素时用auto_saveTrue存下它的特征标签、文本、属性、兄弟节点、路径之后选择器失效时传adaptiveTrue它会在整页里做相似度打分并返回最像的那个。先全局打开这个开关Fetcher.adaptive True page Fetcher.get(https://quotes.toscrape.com/) first page.css(.quote, auto_saveTrue) # 第一次存特征 print(len(first), first[0].css(.text::text).get())预期看到10和第一条名言。假设网站明天改版、.quote没了同一段代码这样兜底quotes page.css(.quote) or page.css(.quote, adaptiveTrue) print(len(quotes))选择器失效时走自适应匹配依然能拿到 10 条。它不依赖 AI纯相似度算法官方文档里用 2010 年的 StackOverflow 和现在的设计做了对照测试同一个 Chrome 生成的长选择器在两版页面里都命中了同一个按钮。另外两点值得注意auto_save只保存选择结果里的第一个元素多元素场景建议每个都显式存一次用Selector直接解析本地 HTML 时要传url参数Scrapling 靠域名隔离各站点的存档。写一个会自己翻页的 Spider单页请求放大到整站不用自己管队列和并发Spider类自带调度、去重和限速from scrapling.spiders import Spider, Response class QuotesSpider(Spider): name quotes start_urls [https://quotes.toscrape.com] async def parse(self, response: Response): for q in response.css(.quote): yield {text: q.css(.text::text).get(), author: q.css(.author::text).get()} next response.css(li.next a::attr(href)).get() if next: yield response.follow(next, callbackself.parse) result QuotesSpider().start() result.items.to_json(quotes.json) print(result.stats.items_scraped)response.follow会自动把相对链接拼成绝对地址并带上Referer。跑完终端打印完整统计quotes.json落盘items_scraped输出104该站共 10 页、每页 10 条。中途CtrlC不会白跑加一个crawldir参数QuotesSpider(crawldir./data).start()下次传同一路径就从断点继续。不写代码时用 extract 命令直接落文件偶尔只需要一页正文进 Python 就重了。scrapling extract一行命令完成下载、转格式、落盘输出格式由文件扩展名决定.md/.txt/.htmlscrapling extract get https://quotes.toscrape.com quotes.md -s .quote预期看到工作目录下出现quotes.md里面是 10 条名言的 Markdown 文本-s指定 CSS 选择器只抓匹配部分不指定则取整个 body。三个最容易踩的坑装完pip install scrapling就 import fetchers如开头所说基础包只含解析引擎报ModuleNotFoundError时补[fetchers]或[all]依赖组再跑一次scrapling install装浏览器。忘了开 adaptiveadaptive默认关闭不开的话auto_saveTrue不会存档后面adaptiveTrue也找不到东西。把动态页面交给 HTTP FetcherFetcher.get不执行 JS渲染型页面拿到的page.css(...)是空列表这是最常见的选择器没错却抓不到的原因换DynamicFetcher即可。接下来可以继续看 Fetcher 选型对照、自适应抓取原理 和 Spider 进阶代理轮换、流式输出把抓取能力补到生产级。使用本库抓取数据前请遵守目标站点的服务条款、robots.txt 及当地法律法规。【免费下载链接】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),仅供参考
返回列表