python Beautiful Soup css常用选择器 总结

CSS3 选择器

在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。

"CSS" 列指示该属性是在哪个 CSS 版本中定义的。(CSS1、CSS2 还是 CSS3。)

Python
选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素。 1 #id #firstname 选择 id="firstname" 的所有元素。 1 * * 选择所有元素。 2 element p 选择所有 <p> 元素。 1 element,element div,p 选择所有 <div> 元素和所有 <p> 元素。 1 element element div p 选择 <div> 元素内部的所有 <p> 元素。 1 element>element div>p 选择父元素为 <div> 元素的所有 <p> 元素。 2 element+element div+p 选择紧接在 <div> 元素之后的所有 <p> 元素。 2 [attribute] [target] 选择带有 target 属性所有元素。 2 [attribute=value] [target=_blank] 选择 target="_blank" 的所有元素。 2 [attribute~=value] [title~=flower] 选择 title 属性包含单词 "flower" 的所有元素。 2 [attribute|=value] [lang|=en] 选择 lang 属性值以 "en" 开头的所有元素。 2 :link a:link 选择所有未被访问的链接。 1 :visited a:visited 选择所有已被访问的链接。 1 :active a:active 选择活动链接。 1 :hover a:hover 选择鼠标指针位于其上的链接。 1 :focus input:focus 选择获得焦点的 input 元素。 2 :first-letter p:first-letter 选择每个 <p> 元素的首字母。 1 :first-line p:first-line 选择每个 <p> 元素的首行。 1 :first-child p:first-child 选择属于父元素的第一个子元素的每个 <p> 元素。 2 :before p:before 在每个 <p> 元素的内容之前插入内容。 2 :after p:after 在每个 <p> 元素的内容之后插入内容。 2 :lang(language) p:lang(it) 选择带有以 "it" 开头的 lang 属性值的每个 <p> 元素。 2 element1~element2 p~ul 选择前面有 <p> 元素的每个 <ul> 元素。 3 [attribute^=value] a[src^="https"] 选择其 src 属性值以 "https" 开头的每个 <a> 元素。 3 [attribute$=value] a[src$=".pdf"] 选择其 src 属性以 ".pdf" 结尾的所有 <a> 元素。 3 [attribute*=value] a[src*="abc"] 选择其 src 属性中包含 "abc" 子串的每个 <a> 元素。 3 :first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。 3 :last-of-type p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。 3 :only-of-type p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。 3 :only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。 3 :nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。 3 :nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。 3 :nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素。 3 :nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。 3 :last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素。 3 :root :root 选择文档的根元素。 3 :empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点)。 3 :target #news:target 选择当前活动的 #news 元素。 3 :enabled input:enabled 选择每个启用的 <input> 元素。 3 :disabled input:disabled 选择每个禁用的 <input> 元素 3 :checked input:checked 选择每个被选中的 <input> 元素。 3 :not(selector) :not(p) 选择非 <p> 元素的每个元素。 3 ::selection ::selection 选择被用户选取的元素部分。 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
选择器 例子 例子描述 CSS
. class . intro 选择 class = "intro" 的所有元素。 1
#id #firstname 选择 id="firstname" 的所有元素。 1
* * 选择所有元素。 2
element p 选择所有 < p > 元素。 1
element , element div , p 选择所有 < div > 元素和所有 < p > 元素。 1
element  element div p 选择 < div > 元素内部的所有 < p > 元素。 1
element > element div > p 选择父元素为 < div > 元素的所有 < p > 元素。 2
element + element div + p 选择紧接在 < div > 元素之后的所有 < p > 元素。 2
[ attribute ] [ target ] 选择带有 target 属性所有元素。 2
[ attribute = value ] [ target = _blank ] 选择 target = "_blank" 的所有元素。 2
[ attribute ~ = value ] [ title ~ = flower ] 选择 title 属性包含单词 "flower" 的所有元素。 2
[ attribute |= value ] [ lang |= en ] 选择 lang 属性值以 "en" 开头的所有元素。 2
: link a : link 选择所有未被访问的链接。 1
: visited a : visited 选择所有已被访问的链接。 1
: active a : active 选择活动链接。 1
: hover a : hover 选择鼠标指针位于其上的链接。 1
: focus input : focus 选择获得焦点的 input 元素。 2
: first - letter p : first - letter 选择每个 < p > 元素的首字母。 1
: first - line p : first - line 选择每个 < p > 元素的首行。 1
: first - child p : first - child 选择属于父元素的第一个子元素的每个 < p > 元素。 2
: before p : before 在每个 < p > 元素的内容之前插入内容。 2
: after p : after 在每个 < p > 元素的内容之后插入内容。 2
: lang ( language ) p : lang ( it ) 选择带有以 "it" 开头的 lang 属性值的每个 < p > 元素。 2
element1 ~ element2 p ~ ul 选择前面有 < p > 元素的每个 < ul > 元素。 3
[ attribute ^= value ] a [ src ^= "https" ] 选择其 src 属性值以 "https" 开头的每个 < a > 元素。 3
[ attribute $ = value ] a [ src $ = ".pdf" ] 选择其 src 属性以 ".pdf" 结尾的所有 < a > 元素。 3
[ attribute *= value ] a [ src *= "abc" ] 选择其 src 属性中包含 "abc" 子串的每个 < a > 元素。 3
: first - of - type p : first - of - type 选择属于其父元素的首个 < p > 元素的每个 < p > 元素。 3
: last - of - type p : last - of - type 选择属于其父元素的最后 < p > 元素的每个 < p > 元素。 3
: only - of - type p : only - of - type 选择属于其父元素唯一的 < p > 元素的每个 < p > 元素。 3
: only - child p : only - child 选择属于其父元素的唯一子元素的每个 < p > 元素。 3
: nth - child ( n ) p : nth - child ( 2 ) 选择属于其父元素的第二个子元素的每个 < p > 元素。 3
: nth - last - child ( n ) p : nth - last - child ( 2 ) 同上,从最后一个子元素开始计数。 3
: nth - of - type ( n ) p : nth - of - type ( 2 ) 选择属于其父元素第二个 < p > 元素的每个 < p > 元素。 3
: nth - last - of - type ( n ) p : nth - last - of - type ( 2 ) 同上,但是从最后一个子元素开始计数。 3
: last - child p : last - child 选择属于其父元素最后一个子元素每个 < p > 元素。 3
: root : root 选择文档的根元素。 3
: empty p : empty 选择没有子元素的每个 < p > 元素(包括文本节点)。 3
: target #news:target 选择当前活动的 #news 元素。 3
: enabled input : enabled 选择每个启用的 < input > 元素。 3
: disabled input : disabled 选择每个禁用的 < input > 元素 3
: checked input : checked 选择每个被选中的 < input > 元素。 3
: not ( selector ) : not ( p ) 选择非 < p > 元素的每个元素。 3
:: selection :: selection 选择被用户选取的元素部分。 3

 




  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
<think>我收到了用户的问题,他想了解BeautifulSoupCSS选择器的用法。根据系统级指令,我需要参考提供的站内引用,并确保回答结构清晰、真实可靠。用户明确询问"BeautifulSoupCSS选择器使用方法",所以我应该从引用中提取关键信息,组织成逐步的讲解。回顾站内引用:-引用[1]提到BeautifulSoup是一个网页解析库,支持CSS选择器。-引用[2]指出CSS选择器用于高效查找HTML元素。-引用[3]描述了嵌套选择和方法混用。-引用[4]和[5]包含具体代码示例:select()方法的基本使用、属性获取和文本提取。这些引用完整覆盖了CSS选择器的核心用法。我将基于它们构建回答,避免添加外部知识以保持真实性。结构化回答:1.从基础引入:解释什么是CSS选择器,在BeautifulSoup中的作用。2.核心方法:重点讲select()方法,这是使用CSS选择器的入口。3.基本选择器类型:分点介绍类、ID、标签等选择器,用引用[4]的代码示例辅助说明。4.高级用法:嵌套选择,引用[3]提到可以混合其他选择器,展示代码。5.属性与文本提取:基于引用[5]的示例解释如何获取href和文本。确保数学表达式用$...$格式:在回答中可能涉及选择器语法如.class,保持普通文本格式。自然添加引用标识:每部分末尾引用对应来源,如[^4]。生成相关问题:基于主题,考虑可能的扩展如实战技巧或常见错误。最后用中文回答:确保语言流畅易懂。</think> 下面是Beautiful SoupCSS选择器使用方法的详细说明(基于引用资料): ### 1. CSS选择器核心方法:`select()` 通过`soup.select(css_selector)`查找元素,返回**Tag对象列表**: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') # 查找所有<ul>下的<li>标签 lis = soup.select('ul li') # [^4] # 查找class为"panel"下的所有class为"panel-heading"的元素 headings = soup.select('.panel .panel-heading') # [^4] ``` ### 2. 基础选择器类型 | 选择器类型 | 语法示例 | 功能说明 | 来源 | |------------------|------------------------|-----------------------------------|--------| | 类选择器 | `.panel-heading` | 选择class属性匹配的元素 | [^4] | | ID选择器 | `#list-2` | 选择id属性匹配的元素 | [^4] | | 标签选择器 | `li` | 选择所有指定标签元素 | [^2] | | 后代选择器 | `.panel .panel-body` | 选择嵌套在父元素内的子元素 | [^4] | ### 3. 嵌套选择与混合使用 ```python # 先选择所有class="item"的元素,再在其中查找<a>标签 tags = soup.select('.item') for tag in tags: a_tags = tag.select('a') # 在结果集上继续使用CSS选择器 [^3] # 混合方法选择器:先通过CSS选择,再用find_all() a_tags = tag.find_all(name='a') # [^5] ``` ### 4. 属性与文本获取 ```python for a in soup.select('a'): # 获取属性值两种方式 href = a['href'] # 直接通过属性名访问 [^5] href = a.attrs['href'] # 通过attrs字典访问 [^5] # 获取文本内容两种方式 text = a.get_text() # 获取所有子孙文本 [^5] text = a.string # 仅当前节点的文本 [^5] ``` ### 5. 选择器组合使用示例 ```python # 获取id="list-2"下class="element"的所有<li> elements = soup.select('#list-2 .element') # [^4] # 获取<li>中带有value1属性的元素 soup.select('li[value1]') # 属性存在选择器 [^5] ``` > **注意要点**: > 1. CSS选择器返回的是**Tag对象列表**,可直接继续解析 > 2. 复杂选择需考虑HTML嵌套层级(如空格表示后代关系) > 3. 属性选择器支持`[attribute=value]`精确匹配[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值