Python~Css选择器、Xpath选择器

写爬虫是经常会使用到提取器,这里做一个简单的学习记录。

环境:Python 3.7

模块:parsel

t = """html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标签选择器</title>
</head>
<style>
    /*-标签选择器*/
    p{
        color: #1aff32;
        font-size: 16px;
    }
    span{
        color: #6495ff;
        font-size: 28px;
    }
    div{
        color: #8dd4ff;
        font-size: 32px;
    }
</style>
<body>
    <h1 class="title">标题1</h1>
    <h1 class="title" id="sole" >标题1</h1>
    <h2 class="title">标题2</h2>
    <h2 class="test">标题3</h2>
    <h2 class="test mult">多个class属性</h2>
    <p>css标签选择器的介绍</p>
    <p>标签选择器、类选择器、ID选择器</p>
    <span>span标签</span>
    <div>div标签</div>
    <a href="https://www.baidu.com">百度一下</a>
    <ul>
    <li>列表1</li>
    <li>列表2</li>
    <li>列表3</li>
    <li>列表4</li>
    </ul>
</body>
</html>"""

复制一串html代码,赋值给变量t
爬虫中经常需要提取网页标签中的内容,re、css、xpath
这里记录一下css和xpath常用的提取方法。

这里使用的是parsel模块,先将字符串t转换为html结构

import parsel
html = parsel.Selector(t)

CSS选择器

1.提取h1标签文本

预览结果:“标题1”

tags = html.css('h1::text').get()
# 或者
# tags = html.css('h1::text').extract_first()
print(tags)
2.提取a标签的href属性

预览结果www.baidu.com

attr = html.css('a::attr(href)').get()
print(attr)
3.提取所有属性class="title"的标签

预览结果['标题1', '标题2']
.get()返回的是字符串,而.getall()返回的是列表。
get()等价于extract_first()getall()等价于extract()

attr_class = html.css('.title::text').getall()
print(attr_class)
4.提取第一个li标签,提取第二个li标签,提取最后一个li标签

预览结果列表1
预览结果列表2
预览结果列表4

lst1 = html.css('li:first-child::text').get()
lst2 = html.css('li:nth-child(2)::text').get()
lst4 = html.css('li:last-child::text').get()
print(lst1)
print(lst2)
print(lst4)
4.通过属性来提取

如代码中,<h2 class="test mult">多个class属性</h2>,有多个属性。
那么提取代码则:

attr = html.css('.test.mult').get()
4.通过id来提取

css选择器中,如果标签里有id,则可以通过id来提取元素,因为网页代码中的id一定是唯一的。

css_id = html.css('sole').get()


xpath选择器

1.提取h1标签文本

预览结果标题1

tags = html.xpath('//h1/text()').get()
print(tags)
2.提取a标签的href属性

预览结果www.baidu.com

attr = html.xpath('//a/@href').get()
print(attr)
3.提取第一个li标签,提取第二个li标签,提取倒数第二个li标签,提取最后一个标签

预览结果列表1
预览结果列表2
预览结果列表3
预览结果列表4

lst1 = html.xpath('//ul/li[1]/text()').get()
lst2 = html.xpath('//ul/li[2]/text()').get()
lst3 = html.xpath('//ul/li[last()-1]/text()').get()
lst4 = html.xpath('//ul/li[last()]/text()').get()
print(lst1)
print(lst2)
print(lst3)
print(lst4)
4.提取属性class="test"h2标签

预览结果标题3

attr_class = html.xpath("//h2[@class='test']/text()").get()
print(attr_class)

总结:在学习爬虫的过程,个人觉得CSS选择器要比xpath方便的多。css选择器是通过标签提取的,而xpath选择器则是通过节点提取。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值