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
参考
-
菜鸟教程XPath、XQuery 以及 XSLT 函数函数参考手册:https://www.runoob.com/xpath/xpath-functions.html
-
《从零开始学Python网络爬虫》 - 罗攀 蒋仟