news 2026/9/3 11:38:12

Scrapling 选择器完全手册:CSS、XPath、正则、文本搜索 12 种取数方法速查清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Scrapling 选择器完全手册:CSS、XPath、正则、文本搜索 12 种取数方法速查清单

Scrapling 选择器完全手册:CSS、XPath、正则、文本搜索 12 种取数方法速查清单

【免费下载链接】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 爬虫框架,既能处理单次请求,也能支撑大规模抓取。它的核心是Selector选择器对象——拿到 HTML 后,你可以用 CSS 选择器、XPath、正则表达式、文本内容四种主流方式取数。本手册把12 种常用取数方法整理成一份速查清单,帮你从新手入门到实战查表,一查就会,少走弯路。

为什么选 Scrapling 选择器?

Scrapling 的解析能力来自对lxml的封装,逻辑与 Scrapy/Parsel 一脉相承,老手可以无缝迁移;同时它额外提供了按文本查找、查找相似元素、过滤式查找等对新手更友好的方法。

从架构图可以看到:抓取到的Response会交给Selector解析,再产出结构化的Items。选择器就是「响应 → 数据」之间的关键一环。

核心对象与文档入口:

  • 选择器主类:scrapling/parser.py
  • 查询元素文档:docs/parsing/selection.md
  • 主类详解:docs/parsing/main_classes.md
  • 文本处理类型:scrapling/core/custom_types.py
  • CSS 转 XPath:scrapling/core/translator.py

12 种取数方法速查清单

先用Selector加载页面(page代表页面对象):

from scrapling import Selector page = Selector('<html>...</html>', url='https://example.com')

下表按「怎么找」和「怎么取」两大类,汇总 12 种方法,方便速查。

#方法作用一句话用法
1css()CSS 选择器page.css('.product')
2xpath()XPath 选择器page.xpath('//a/@href')
3find()过滤式查找(返回第一个)page.find('a', class_='btn')
4find_all()过滤式查找(返回全部)page.find_all('div', {'class':'item'})
5find_by_text()按文本内容查找page.find_by_text('价格', partial=True)
6find_by_regex()按正则匹配文本查找page.find_by_regex(r'£[\d\.]+')
7find_similar()查找相似元素el.find_similar()
8search()/filter()在结果集合中再筛选page.css('.p').filter(fn)
9get()/getall()Scrapy 风格取值page.css('h1::text').get()
10.text/get_all_text()取元素文本page.css('h1')[0].text
11re()/re_first()正则抽取字段el.re(r'\d+\.?\d*')
12.attrib/has_class()/json()取属性与结构化数据el.attrib['href']

CSS 选择器:最稳妥的按类取数

css()支持 W3C CSS3 规范,并扩展了取文本/属性的伪元素:::text取文本,::attr(name)取属性值。

title = page.css('h1::text').get() # 取第一个 h1 文本 link = page.css('a::attr(href)').get() # 取第一个链接地址

小贴士:按类取数时优先用 CSS。XPath 的[@class="product"]在多 class 场景下可能不准。

XPath 选择器:灵活强大的节点定位

xpath()通过lxml原生提供,适合复杂结构定位。可自由嵌套与链式调用:

title = page.xpath('//*[@class="product"]//h1[contains(text(),"Phone")]/text()').get()

注意:Scrapling 没有实现has-class扩展函数,需要用has_class()方法代替。

文本搜索:新手最易上手的取数方式

不会写选择器?直接按「看到的文字」找元素即可。

  • 精确/包含查找find_by_text('关键词', partial=True)partial=True表示包含匹配。
  • 正则查找find_by_regex(r'£[\d\.]+')可传字符串或已编译的正则。
el = page.find_by_text('Tipping the Velvet') url = page.urljoin(el.attrib['href']) # 相对路径转完整 URL

共同参数:first_match(默认只返回第一个)、case_sensitive(是否区分大小写)、clean_match(匹配前清理空格)。

过滤式查找:像 BeautifulSoup 一样直白

find()/find_all()借鉴自 BeautifulSoup 的find_all,支持标签名、属性字典、正则、函数多种条件「瀑布式」叠加:

# 所有 class 为 quote 的 div page.find_all('div', class_='quote') # 属性值结尾匹配 page.find_all({'href$': 'Einstein'}) # 属性值包含匹配 page.find_all({'href*': '/author/'})

查找相似元素:从 1 个复制到 N 个

find_similar()是 Scrapling 的招牌能力:先找到一个元素(如某商品卡片),再自动找出同层级、同结构的其它同类元素。

first = page.find_by_text('Add to Cart') siblings = first.find_similar() # 自动找出其余商品卡片

数据抽取:从元素到字符串

找到元素后,用下面几种方式把数据「掏出来」:

  • 取文本el.text取直接文本,el.get_all_text()递归取全部文本。
  • Scrapy 风格get()取第一个值,getall()取全部值(等价于extract_first/extract)。
  • 正则抽取re()/re_first()可从文本里精确抽字段。
price = page.css('.price_color')[0].re_first(r'[\d\.]+') # -> '51.77' prices = page.css('.price_color').re(r'[\d\.]+') # -> ['51.77', ...]
  • 取属性与结构化el.attrib['href']取属性;has_class('x')判断 class;json()直接把文本内容解析成 JSON 对象。

为元素生成选择器:一次查找,长期复用

任意元素都能反推出可复用的 CSS / XPath 选择器,不管你是用哪种方法找到的它:

el.generate_css_selector # 尽量短的 CSS 选择器 el.generate_full_xpath_selector # 从页面根开始的完整 XPath

新手速记:3 条黄金法则

  1. 优先 CSS 按类取数,比 XPath 更稳、更短。
  2. 不会写选择器就用find_by_text/find_all,按肉眼可见的文字定位。
  3. 拿到元素后链式取值get()取第一个,getall()取全部,re_first()抽字段。

把上面 12 种方法对照速查表收藏起来,绝大多数网页取数场景都能直接查表解决。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 11:37:56

技术选题不清晰?以Split Dance为例的博文主题定位指南

这个标题暂时还缺少足够的技术背景信息&#xff0c;我没法直接据此产出一篇可信的 CSDN 技术教程。当前项目标题是&#xff1a;“【星十六】Split Dance”。从字面看&#xff0c;“Split Dance”更像是一个舞蹈作品名、舞台节目名或娱乐向内容&#xff0c;而不是一个明确的技术…

作者头像 李华
网站建设 2026/9/3 11:37:52

51单片机驱动HX710B实现高可靠气压水位检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:34:57

代码启示录游戏下载安装与编程学习全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:29:08

ELK日志平台架构详解:从集中采集到TraceID关联的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 11:28:49

大模型调用量持续增长背后:统计口径、API成本与推理集群工程实践

“中国大模型调用量连续 15 周超过美国”这个消息&#xff0c;在开发者群里传得很快。很多人第一反应是兴奋&#xff0c;第二反应是疑惑&#xff1a;这个“调用量”到底是怎么统计出来的&#xff1f;是 API 请求次数&#xff0c;还是 Token 消耗量&#xff1f;统计口径连公开报…

作者头像 李华
网站建设 2026/9/3 11:27:12

视频补帧实战指南:解决劈叉舞慢动作卡顿与重影问题

“补帧”这词在网络视频处理里已经被说得很神&#xff0c;但放到劈叉舞&#xff08;Split Dance / スプリットダンス&#xff09;这类素材上&#xff0c;很多人第一次跑完会一脸疑惑&#xff1a;为什么动作还是不够顺&#xff0c;甚至有些地方出现“重影”和“果冻状扭曲”&…

作者头像 李华