ARTICLE DETAIL

资讯详情

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

Python 网页抓取撞上 403 和空页面?Scrapling 用 3 个 Fetcher 把静态、动态、强反爬一次抓完

Python 网页抓取撞上 403 和空页面?Scrapling 用 3 个 Fetcher 把静态、动态、强反爬一次抓完 Python 网页抓取撞上 403 和空页面Scrapling 用 3 个 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用 requests 抓个列表页被 403 拦下换个 JS 渲染的站点body里只剩骨架屏——Python 网页抓取的第一道坎就是反爬和动态页面渲染。Scrapling 就是为这两种情况做的三个 Fetcher 分别对应静态、动态、强反爬页面从单次请求到批量抓取一个库覆盖。 30 秒跑起来这一节解决环境问题两行装好三行出结果git clone https://gitcode.com/GitHub_Trending/sc/Scrapling cd Scrapling pip install -e .from scrapling.fetchers import Fetcher page Fetcher.get(https://example.com) print(page.css_first(title) # 返回选择器对象直接取文本或属性 )返回的page本身就带解析能力不用再引入 BeautifulSoup。 静态页面直接取数这一节解决普通 HTML 页面的取数和选择器写法。from scrapling.fetchers import Fetcher page Fetcher.get(https://example.com) print(page.css_first(.title).text) # CSS 选择器 print(page.xpath_first(//h1).text) # XPath 选择器页面结构偶尔改版时可以打开 adaptive 模式选择器失效后它按之前记录的特征自动重定位元素不用每次改代码。选择器写法详见 选择器文档。另一个省事的功能在 CLI/shell 里浏览器 DevTools 里复制的 cURL 命令可以直接粘进 scrapling 执行headers、cookie 自动还原不用手工翻译请求。⏳ 动态页面怎么等这一节解决页面还没渲染完就取数、结果全是空的问题。from scrapling.fetchers import DynamicFetcher page DynamicFetcher.fetch( https://dynamic-site.com, network_idleTrue, # 等网络空闲 wait_selector.product-card, # 或等目标元素出现 ) print(page.css_first(.product-card).text)network_idle等请求停掉再返回wait_selector等指定选择器出现才继续。两个参数二选一即可取数时机由页面决定比固定time.sleep稳也不会多等无谓的时间。参数全集见 动态抓取文档。 隐身模式参数怎么配这一节解决 Cloudflare 拦截、指纹检测这类强反爬站点。from scrapling.fetchers import StealthyFetcher page StealthyFetcher.fetch( https://protected-site.com, headlessTrue, solve_cloudflareTrue, # 自动过 Cloudflare 挑战 humanizeTrue, # 拟人化输入与行为 geoipTrue, # 指纹与代理出口 IP 保持一致 )solve_cloudflare会自动处理 Turnstile 等挑战humanize模拟人类操作节奏geoip保证指纹和出口 IP 自洽——这几项配合起来能过掉大多数基于指纹的检测。更轻的场景下scrapling.engines.toolbelt.fingerprints里的generate_headers可以直接生成一组浏览器风格请求头传给Fetcher.get的headers参数就能用。 批量抓取怎么组织这一节解决几十个 URL 的循环请求与失败重试。from scrapling.fetchers import FetcherSession urls [fhttps://example.com/page/{i} for i in range(10)] with FetcherSession(retries3, retry_delay1) as session: for url in urls: try: page session.get(url) print(page.status, len(page.body)) except Exception as e: print(跳过:, url, e)FetcherSession复用连接并共享 cookieretries和retry_delay是内置的重试与退避外层再包一层 try/except单个 URL 挂了不影响整批。更大的并发规模、断点续抓和自动代理轮换走它自带的 spider 框架✅ 上手注意这一节是踩坑清单三条headless 快但特征更明显过不了检测时加humanize或临时开 headed 模式定位原因动态页一律优先wait_selector固定 sleep 只会在页面变慢时翻车先确认状态码再解析403/429 说明换 Fetcher 或加代理而不是改选择器 边界一句Scrapling 适合单次请求到并发爬虫之间的绝大多数取数场景它不替你判断某份数据能不能拿付费接口、需要人工输入的验证码流程也不在覆盖范围内。从Fetcher.get一行取静态页到StealthyFetcher配齐隐身参数中间不用换库、不用拼依赖按上面三个 Fetcher 对号入座就行。抓之前先看一眼目标站的 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),仅供参考
返回列表