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 种方法,方便速查。
| # | 方法 | 作用 | 一句话用法 |
|---|---|---|---|
| 1 | css() | CSS 选择器 | page.css('.product') |
| 2 | xpath() | XPath 选择器 | page.xpath('//a/@href') |
| 3 | find() | 过滤式查找(返回第一个) | page.find('a', class_='btn') |
| 4 | find_all() | 过滤式查找(返回全部) | page.find_all('div', {'class':'item'}) |
| 5 | find_by_text() | 按文本内容查找 | page.find_by_text('价格', partial=True) |
| 6 | find_by_regex() | 按正则匹配文本查找 | page.find_by_regex(r'£[\d\.]+') |
| 7 | find_similar() | 查找相似元素 | el.find_similar() |
| 8 | search()/filter() | 在结果集合中再筛选 | page.css('.p').filter(fn) |
| 9 | get()/getall() | Scrapy 风格取值 | page.css('h1::text').get() |
| 10 | .text/get_all_text() | 取元素文本 | page.css('h1')[0].text |
| 11 | re()/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 条黄金法则
- 优先 CSS 按类取数,比 XPath 更稳、更短。
- 不会写选择器就用
find_by_text/find_all,按肉眼可见的文字定位。 - 拿到元素后链式取值:
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),仅供参考