表达式 |
说明 |
* |
选择所有节点 |
#container |
选择id为container的节点 |
.container |
选取所有class包含container的节点 |
li a |
选取所有li下的所有a节点 |
ul + p |
选择ul后面的第一个p元素 |
div#container > ul |
选取id为container的div的第一个ul子元素 |
ul ~ p |
选取与ul相邻的所有p元素 |
a[title] |
选取所有有title属性的a元素 |
a[href=“http://jobbole.com”] |
选取所有href属性为jobbole.com值的a元素 |
a[href*=”jobole”] |
选取所有href属性包含jobbole的a元素 |
a[href^=“http”] |
选取所有href属性值以http开头的a元素 |
a[href$=“.jpg”] |
选取所有href属性值以.jpg结尾的a元素 |
input[type=radio]:checked |
选择选中的radio的元素 |
div:not(#container) |
选取所有id非container的div属性 |
li:nth-child(3) |
选取第三个li元素 |
tr:nth-child(2n) |
第偶数个tr |
大家可以自行通过上一节的方式,使用css选择器实现字段解析。
css选择器内容丰富,上面只是部分功能。例如:
.a .b
表示class为a下的class为b的标签。
而:
.a.b
则表示class既有a又有b的标签。
需要说明的是,css选择器中有与xpath中的 /text() 功能一样的伪类选择器:
::text
此外还有一个::attr()伪类选择器,例如下面可以获取标签中的href属性的值:
::attr(href)
将这个加在css选择字符串的后方即可实现内容提取。
还有一点说明,python3将所有的字符编码都转为Unicode,这是py3与py2的区别。
最后要说的是,在解析时,有时id是与文章url挂钩的,此时id不具有通用性,不可作为筛选条件。