Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用

Python - 爬虫 - Xpath定位之starts-with()和string()函数的简单使用

starts-with()

1. 函数原型

函数解释
fn:starts-with(string1,string2)如果 string1 以 string2 开始,则返回 true,否则返回 false。
例子:starts-with(‘XML’,‘X’)
结果:true

2. 使用starts-with()获取相同字符开头的多个标签

测试用的HTML

<li class="tag-1">列表项_1</li>
<li class="tag-2">列表项_2</li>
<li class="tag-3">列表项_3</li>
<li class="item-4">列表项_4</li>

使用starts-with()获取class属性开头为"tag"<li>标签的文本

from lxml import etree

html_txt = """
<li class="tag-1">列表项_1</li>
<li class="tag-2">列表项_2</li>
<li class="tag-3">列表项_3</li>
<li class="item-4">列表项_4</li>
"""

# etree选择器
selector = etree.HTML(html_txt)
# 使用starts-with()获取class属性开头为"tag"的<li>标签的文本
contents = selector.xpath('//li[starts-with(@class, "tag")]/text()')

# 打印获取到的文本
for content in contents:
    print(content)

运行结果

列表项_1
列表项_2   
列表项_3

代码解释

  • 可以看到结果不包括这一项<li class="item-4">列表项_4</li>
  • starts-with(string1,string2)
    该函数比较的是两个字符串,我们先通过@class获取到相应<li>标签的class属性值,然后再根据string2匹配,成功则返回true,选取该<li>标签,false则不选取

string()

1. 函数原型

函数解释
fn:string(arg)返回参数的字符串值。参数可以是数字、逻辑值或节点集。
例子:string(314)
结果:“314”

2. 使用string()获取标签套标签的文本内容

测试用的HTML

<div class="red">
    内容1
    <div>
        内容2
        <div>
            内容3
        </div>
    </div>
</div>

使用string()获取标签套标签的文本内容

from lxml import etree

html_text = """
<div class="red">
    内容1
    <div>
        内容2
        <div>
            内容3
        </div>
    </div>
</div>
"""

selector = etree.HTML(html_text)

# 选择class属性为"red"的list,选择0号项(因为只有1个符合条件的div)
content1 = selector.xpath('//div[@class="red"]')[0]
# 选择当前结点返回字符串
content2 = content1.xpath('string(.)')

# 打印输出字符串
print(content2)

运行结果


    内容1

        内容2

            内容3

代码解释

  • string()参数可以是数字、逻辑值或节点集

  • string(.)表示选择当前结点返回字符串

    尝试使用string(div)

    content2 = content1.xpath('string(div)')
    print(content2)
    

    运行结果

    
          内容2
    
              内容3
    
    

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

insight^tkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值