python爬虫中xpath的使用方法

python爬虫中xpath的使用方法

前言

这里默认读者已经按照lxml包,因此在使用一下案例的使用,第一步就是导入包:

from lxml import etree

使用案例

这里都使用一下的测试文本

#测试html文档
wb_data = """
        <div>
            <ul>
                 <li class="item-0"><a href="link1.html">first item</a></li>
                 <li class="item-1"><a href="link2.html">second item</a></li>
                 <li class="item-inactive"><a href="link3.html">third item</a></li>
                 <li class="item-1"><a href="link4.html">fourth item</a></li>
                 <li class="item-0"><a href="link5.html">fifth item</a>
             </ul>
         </div>
    """

使用包方法,获取一个一个html页面的对象,需要说明的是,这里会自动补全页面中缺失的必要标签。

#使用etree的HTML方法获取数据,返回的是一个节点对象
html = etree.HTML(wb_data)

读者可以使用:print((etree.tostring(html)).decode("UTF-8"))进行测试。

01.通过对应的a标签获取a标签中的内容

html = etree.HTML(wb_data)
html_data=html.xpath("/html/body/div/ul/li/a")#此时返回的是各个标签对象
for i in html_data:
    print(i.text)

结果为:

first item
second item
third item
fourth item
fifth item

当然也可以改变xpath的值,使用:"/html/body/div/ul/li/a/text()"返回一个列表:['first item', 'second item', 'third item', 'fourth item', 'fifth item']

02.获取指定路径下a标签的属性

html = etree.HTML(wb_data)
html_data=html.xpath("/html/body/div/ul/li/a/@href")#返回一个列表
print(html_data)

结果为:['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

03.获取绝对路径下a标签属性等于link2.html的内容

html_data=html.xpath('/html/body/div/ul/li/a[@href="link2.html"]/text()')
print(html_data)

结果为:['second item']

04.(相对路径)查找所有li标签下的a标签内容

html_data=html.xpath("//li/a/text()")
print(html_data)

结果为:['first item', 'second item', 'third item', 'fourth item', 'fifth item']

05.相对路径获取标签的属性

html_data=html.xpath("//li/a/@href")
print(html_data)

结果为:['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']

06.相对路径下查特定属性的方法

html_data=html.xpath("//li/a[@href='link2.html']/text()")
print(html_data)

结果为:['second item']

07.查找倒数第二个li标签里的a标签的href属性

html_data = html.xpath('//li[last()-1]/a/text()')
print(html_data)

结果:['fourth item']
当然获取最后一个标签为:li[last()]

在浏览器中获取xpath方法

这个可以参考本人博客关于使用requests爬取酷狗hot500的案例
更多关于自然语言处理,机器学习,python使用等可以关注博主的个人微信订阅号:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/80347837