css 选择器
在玩 python爬虫 时, 我们经常要定位标签, 获取属性
在这个过程中, 靠 css选择器 是一个十分有利的方法, 不仅简洁而且边界
就个人看来, 在正则 , xpath , 和 css选择器 中, 如果 css选择器 能用, 我肯定会选 css选择器
我们先来看这个 html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>css选择器练习qwq</title>
<style>
.qwq{
font-family: 黑体;
background-color: yellow;
color: purple;
size: 20px;
}
</style>
</head>
<body>
<!--第一个-->
<p class="qwq">qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq</p>
<!--第二个-->
<a id="awa" href="https://www.cnblogs.com/syqwq/">awa awa awa awa awa awa awa awa awa awa awa awa awa</a>
<!--第三个-->
<p class="qwq">QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ</p>
</body>
</html>
0x01 准备工作
先将上面的 html代码 储存起来(保存为字符串):
# coding = utf-8
import parsel # 导入parsel库, 用来解析网页
# 网页源码
html = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>css选择器练习qwq</title>
<style>
.qwq{
font-family: 黑体;
background-color: yellow;
color: purple;
size: 20px;
}
</style>
</head>
<body>
<!--第一个-->
<p class="qwq">qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq</p>
<!--第二个-->
<a id="awa" href="https://www.cnblogs.com/syqwq/">awa awa awa awa awa awa awa awa awa awa awa awa awa</a>
<!--第三个-->
<p class="qwq">QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ</p>
</body>
</html>
"""
if __name__ == '__main__':
parse_html = parsel.Selector(html) # 解析网页
0x02 开整
在 parsel 库中, 对于 parse_html
要用 css 可以这样写:
parse_html.css('css选择器表达式')
用 xpath 可以这样:
parse_html.xpath('xpath表达式')
元素选择器:
直接选择文档元素
比如head
,p
类选择器:
元素的class属性,比如 <h1 class="important">
类名就是 important
.important
选择所有有这个类属性的元素
可以结合元素选择器,比如 p.important
ID选择器:
元素的id属性,比如 <h1 id="intro">
id
就是 intro
\#intro
用于选择 id=intro
的元素
可以结合元素选择器,比如 p#intro
属性选择器:
选择有某个属性的元素,而不论值是什么。*[title]
选择所有包含 title
属性的元素
a[href]
选择所有带有 href
属性的锚元素
还可以选择多个属性,比如:a[href][title]
,注意这里是要同时满足。限定值:a[href="www.so.com"]
后代(包含)选择器:
选择某元素后代的元素(层级不受限制)
选择 h1
元素的 em
元素:h1 em
子元素选择器:
范围限制在子元素
选择 h1
元素的子元素 strong
:h1 > strong
参考图:
0x03 实例
-
获取
<!--第一个-->
select_item = parse_html.css('body p.qwq').extract_first() print(select_item)
-
获取 所有
class
为qwq
的标签select_item = parse_html.css('body p.qwq').extract() print(select_item)
-
获取
id
为awa
的标签select_item = parse_html.css('body a#awa').extract() print(select_item)
-
获取
p
标签的 文本内容select_item = parse_html.css('body p.qwq::text').extract() print(select_item)
-
获取
a
标签的 链接select_item = parse_html.css('body a#awa::attr("href")').extract() print(select_item)
0x04 完整代码
# coding = utf-8
import parsel
html = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>css选择器练习qwq</title>
<style>
.qwq{
font-family: 黑体;
background-color: yellow;
color: purple;
size: 20px;
}
</style>
</head>
<body>
<!--第一个-->
<p class="qwq">qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq</p>
<!--第二个-->
<a id="awa" href="https://www.cnblogs.com/syqwq/">awa awa awa awa awa awa awa awa awa awa awa awa awa</a>
<!--第三个-->
<p class="qwq">QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ</p>
</body>
</html>
"""
if __name__ == '__main__':
parse_html = parsel.Selector(html)
select_item = parse_html.css('body p.qwq').extract_first()
print(select_item)
print(type(select_item))
print('='*10)
select_item = parse_html.css('body p.qwq').extract()
print(select_item)
print(type(select_item))
print('='*10)
select_item = parse_html.css('body a#awa').extract()
print(select_item)
print(type(select_item))
print('='*10)
select_item = parse_html.css('body p.qwq::text').extract()
print(select_item)
print(type(select_item))
print('='*10)
select_item = parse_html.css('body a#awa::attr("href")').extract()
print(select_item)
print(type(select_item))
print('='*10)
Run :
<p class="qwq">qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq</p>
<class 'str'>
==========
['<p class="qwq">qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq</p>', '<p class="qwq">QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ</p>']
<class 'list'>
==========
['<a id="awa" href="https://www.cnblogs.com/syqwq/">awa awa awa awa awa awa awa awa awa awa awa awa awa</a>']
<class 'list'>
==========
['qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq', 'QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ QwQ']
<class 'list'>
==========
['https://www.cnblogs.com/syqwq/']
<class 'list'>
==========
Process finished with exit code 0