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表达式')

元素选择器:

直接选择文档元素
比如headp

类选择器:

元素的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 元素的子元素 strongh1 > strong


参考图:

参考图

0x03 实例

  • 获取 <!--第一个-->

    select_item = parse_html.css('body p.qwq').extract_first()
    print(select_item)
    
  • 获取 所有 classqwq 的标签

    select_item = parse_html.css('body p.qwq').extract()
    print(select_item)
    
  • 获取 idawa 的标签

    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

posted @ 2021-02-06 10:41  不爱喝橙子汁的橙子  阅读(112)  评论(0编辑  收藏  举报