网页解析_xpath-02

第一部分:简介

 第二部分:代码块

1:公共代码部分

2:主要代码块 

page=etree.HTML(html_str)  #
print(page) # <Element html at 0x183fc16dc08>
print(type(page)) # <class 'lxml.etree._Element'>
print(page.xpath('/html')) # [<Element html at 0x18bfcd43c08>] 从跟节点选择
print(page.xpath('/p')) # []
# 1.标签与属性的选择
print(page.xpath('/html/body/footer')) # /:一级级选择 [<Element footer at 0x2835b023b48>]
print(page.xpath('/html/body/p')) # /:从路径开始,一级级选择 [] p不是下一级
print(page.xpath('//p')) # 获取所有p标签,不限位置
# [<Element p at 0x1db29126b88>, <Element p at 0x1db29126bc8>, <Element p at 0x1db29126c88>]
print(page.xpath('//p')[0]) # 获取所有p标签,不限位置
# <Element p at 0x1e491e46b88>
p=page.xpath('//p')[0]
print(p.xpath('./a')) # .当前标签 获取第一个a [<Element a at 0x24a055f6c88>]
print(p.xpath('.//a')) # .当前标签 //获取所有a
# [<Element a at 0x20f760d6c88>, <Element a at 0x20f760d6bc8>,
# <Element a at 0x20f760d6cc8>, <Element a at 0x20f760d6d08>, <Element a at 0x20f760d6d48>]
print(p.xpath('.//a')) # .当前标签 //获取所有a <Element a at 0x2b7d07f6d88>
print(p.xpath('./span')) # .当前标签 //获取所有 [<Element span at 0x2b7d07f6d88>, <Element span at 0x2b7d07f6c88>]
print(p.xpath('.//a')[0]) # .当前标签 //获取所有a <Element a at 0x1b23d0a6d48>
a=p.xpath('.//a')[0]
print(a.xpath('..')) # 选取当前节点的父节点 为p [<Element p at 0x256d18c6b88>]
# nodename 选取当前节点的所有nodename子节点
print(page.xpath('body')) # [<Element body at 0x263305c6cc8>]
#
print(p.xpath('a')) # [<Element a at 0x2cae1256d48>]
print('======================================================')
# 2.
p=page.xpath('//p') # 如果要选择指定的p怎么办?根据属性
print(p)
# [<Element p at 0x20f22746b88>, <Element p at 0x20f22746cc8>, <Element p at 0x20f22746d88>]
# < p
# class ="top-content" id="111" >
print(page.xpath('//p[@class="top-content"]')) # [<Element p at 0x1c006aa6b88>]
print(page.xpath('//p[@class="top-content"]/@id')) # 很常用 ['111']
print(page.xpath('//p/*')) # 选取p元素的所有子元素 * 匹配任何元素节点
print(page.xpath('//p/@*')) # @* 匹配任何属性节点 @*:所有p标签下的属性
# 获取所有的属性: ['top-content', '111', 'bottom-content', 'copyright-desc']
# print(page.xpath('//*')) # 获取所有元素
#
print(page.xpath('//p[@class="top-content"]/a')) # 跟下面相同的 列表是从0开始
# [<Element a at 0x23d90566d48>]
print(page.xpath('//p[@class="top-content"]/a')[0]) # <Element a at 0x1ab226e7d48>
print(page.xpath('//p[@class="top-content"]/a[1]')) # 相同的 如果在xpath里进行索引选择 是从1开始
# [<Element a at 0x1ab226e7d48>]
print('===================================================')
print(page.xpath('//p[@class="top-content"]/a[last()]')) # 待? [<Element a at 0x1d2d49a6d48>]
# 3.获取文本
# 用text()获取某个节点下的文本
# 如果在源码增加<a href="https://www.xiaoxa" id=25>xiaogan</a>
contents=page.xpath('//p//a/text()') # 获取/所有p下的所有a元素 拿到的是列表
print(contents) # ['淘宝', '关于Python', '好好学习', '人生苦短', '我用Python', '400-1567-315']
# 用string()获取某个节点下所有的文本
contents1=page.xpath('string(//p)') # 拿到一个p的内容
print(contents1)
print(page.xpath('string(//body)')) # 如果想拿更多内容把范围选大一些
# print(page.xpath('string(//html)')) # 这种方式拿数据不好

 

posted @   人生努力努力努力就好  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示