【爬虫提取数据三板斧之二】CSS 选择器资料整理
CSS即层叠样式表,其选择器是一种用来确定HTML文档中某部分位置的语言。 CSS选择器的语法比XPath更简单一些,但功能不如XPath强大。实际上,当我们调用selector对象的CSS方法时,其内部会使用Python库cssselect将CSS选择器表达式翻译成XPath表达式,然后调用selector对象的XPATH方法。CSS选择器方法
“CSS” 列指示该属性是在哪个 CSS 版本中定义的。(CSS1、CSS2 还是 CSS3。)
选择器 | 例子 | 例子描述 | 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>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 |
常用CSS选择器方法
- 选中所有的E元素,直接元素名
>>>response.css('img')
- 选中E1和E2元素,使用‘,’逗号
>>>response.css('E1,E2')
- 选中E1后代元素中的E2元素,使用空格
>>>response.css('E1 E2')
- 选中E1志愿书中的E2元素,使用‘>’符号
>>>response.css('E1>E2')
- 选中包含ATTR属性的元素,使用‘[]’符号
>>>response.css('[attr]')
- 选中包含ATTR属性且值为VALUE的元素,使用‘[attr=value]’符号
>>>response.css('[attr=value]')
- 选中E元素,且该元素必须是其父元素的第n个子元素,使用‘E:nth-child(n)’
>>>response.css('E:nth-child(n)')
- 选中E的第一个子元素,使用‘E:first-child’
- 选中E的最后一个子元素,使用‘E:last-child’
- 选中E元素的文本节点,使用‘E::text’