尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Scrapling 网页抓取框架指南:按页面难度选爬虫,覆盖无头浏览器渲染与 Cloudflare 反爬

Scrapling 网页抓取框架指南:按页面难度选爬虫,覆盖无头浏览器渲染与 Cloudflare 反爬 Scrapling 网页抓取框架指南按页面难度选爬虫覆盖无头浏览器渲染与 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/ScraplingScrapling 是一个 Python 网页抓取框架把静态请求、无头浏览器 JS 渲染、Cloudflare 反爬验证收进同一套 API让你从抓一个页面到跑整站爬虫都在同一个库里完成。 一句话看懂这个库Scrapling 的定位是把三件通常要拼好几个库才能干完的事——发 HTTP 请求、渲染 JS、绕过反爬验证——收敛到一套 API 里。requests加BeautifulSoup加Playwright的组合也能覆盖同样的范围但你需要分别维护依赖、分别处理时序问题Scrapling 让请求、解析、自动化共用同一个page对象拿到页面后不用换库就能选元素。 安装与验证先把依赖装对否则import会直接失败。要求 Python 3.10 及以上浏览器类抓取器还要额外装一个运行环境。git clone https://gitcode.com/GitHub_Trending/sc/Scrapling cd Scrapling pip install -e .[fetchers] scrapling install装完用这几行确认链路通了from scrapling.fetchers import Fetcher page Fetcher.get(https://example.com) print(page.status) print(page.get_all_text())返回的page本身就是解析器status是 HTTP 状态码之后可以直接在它上面用 CSS 或 XPath 选元素不必再转一层 BeautifulSoup。 按页面难度选对爬虫先判定页面属于哪一档再决定上哪个抓取器能省掉大量试错。三档对照如下页面类型对应类什么时候用它纯静态Fetcher内容服务端渲染、直接写在 HTML 里JS 渲染DynamicFetcher内容靠前端脚本生成得跑浏览器强反爬 / CloudflareStealthyFetcher有人机验证、指纹检测这类硬拦截静态页只发请求不跑浏览器原理一句话Fetcher底层走curl_cffi直接在 TLS 握手层模仿真实浏览器不启动任何浏览器进程所以最快。关键参数是impersonate用来指定模仿哪款浏览器TLS 指纹指握手指纹能对上真实浏览器才不容易被拦默认用最新版 Chrome也可以传firefox、safari或带版本号from scrapling.fetchers import Fetcher page Fetcher.get(https://quotes.toscrape.com, impersonatechrome) items page.css(.quote .text).get_all() print(items[0])参数细节见 docs/fetching/static.md。JS 渲染页让无头浏览器跑完再取原理一句话DynamicFetcher起一个真实 Chromium 把页面渲染完才返回前端脚本该执行的全执行一遍。两个关键参数network_idleTrue表示连续 500ms 没有网络活动才算加载完成network idle 即页面一段时间没再发新请求wait_selector能等某个元素出现后再返回避免取到半加载状态。另外real_chromeTrue改用本机安装的 Chrome指纹更真实。from scrapling.fetchers import DynamicFetcher page DynamicFetcher.fetch( https://quotes.toscrape.com/js/, network_idleTrue, ) print(page.get_all_text())参数说明见 docs/fetching/dynamic.md。硬拦截Cloudflare 自动解验证原理一句话StealthyFetcher在DynamicFetcher之上叠了一层反检测默认就隐藏 Playwright 痕迹、给 canvas 加噪、堵住 WebRTC 泄漏WebRTC 泄漏指浏览器音视频能力会顺带暴露真实 IP。关键参数是solve_cloudflareTrue它会自动识别并解掉各种挑战——JS 挑战、点选验证、隐形验证——过完才把页面交给你。因为解验证需要时间建议把timeout调到 60000 毫秒以上from scrapling.fetchers import StealthyFetcher page StealthyFetcher.fetch( https://target-site.com, solve_cloudflareTrue, timeout60000, ) print(page.status)反检测选项最全含屏蔽广告域、走代理、时区伪装完整清单见 docs/fetching/stealthy.md。⚠️ 踩坑速查现象装了 scrapling 却import不到Fetcher。原因默认只带解析器fetchers是可选依赖没装上。修复补pip install scrapling[fetchers]再跑scrapling install拉取浏览器运行环境。现象动态页拿到的文本是空的。原因JS 还没执行完页面就返回了。修复给DynamicFetcher.fetch加network_idleTrue或用wait_selector.target等关键元素出现。现象站点一改版所有写死的选择器集体失效。原因DOM 结构变了固定 CSS 匹配不上。修复开自适应模式先按内容特征存档改版后按相似度重新定位products page.css(.product, auto_saveTrue) # 首次抓取存下特征 products page.css(.product, adaptiveTrue) # 改版后按相似度重找存储与匹配原理见 docs/parsing/adaptive.md。现象Cloudflare 总是过不了、超时失败。原因默认 30 秒超时不够解验证用。修复启用solve_cloudflare时把timeout提到 60000 毫秒以上。 跑进生产批量抓取时把单次fetch换成 Session 版本如StealthySession、DynamicSession浏览器只启动一次、后续请求复用同一实例速度差一个量级。大规模任务配上限速与代理轮询AutoThrottle按观测到的延迟自动调节每个域名的请求间隔、被拦就加倍ProxyRotator在多个代理之间自动轮转并发拉满也不容易把目标站打挂或把自己的 IP 拉黑源码见 scrapling/spiders/throttle.py。长任务用 Spider 框架的断点能力指定crawldir后中断会保存进度、重跑时从上次的地方继续不用从零再来配合日志落盘方便排查架构细节见 docs/spiders/architecture.md。抓之前先查目标站的 robots.txt、把请求频率压下来、只采集公开数据。框架内置了 scrapling/spiders/robotstxt.py可让爬虫自动遵守协议。决策路径拿最难的那个页面开刀先用Fetcher.get确认内容到底在不在 HTML 里拿不到再换DynamicFetcher跑一遍遇到验证上StealthyFetcher并开solve_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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表