Python 轻量级 HTML 解析器 - lxml入门教程

文章目录

初始化解析器

python 复制代码
from lxml import html
from lxml.html import HtmlElement

page = '''
<html><head></head>
<body>
    <div id="overlay" class="hidden">
        <div id="loader"></div>
    </div>
    <header id="rootHeader" class="login">
        <div class="wrapper content login">
            <table width="186" border="0">
            </table>
            <div class="login">
                example content
            </div>
            <a href="https://www.example.com">Torrent Kitty - Free Torrent To Magnet Link Conversion Service</a>
        </div>
    </header>
    <div class="becbdbcf otherClassName">
            Your Internet and Goverment can track your torrent Activity! Hide your
            IP with a VPN!
    </div>
    <a href="https://example.com">Torrent Kitty - Free Torrent To Magnet Link Conversion Service</a>
</body></html>
'''

rootElement: HtmlElement = html.fromstring(page)

# 简单查找,获取指定类别的所有标签

elements: list[HtmlElement] = rootElement.find_class('login')
print(elements)

路径查找

  • HtmlElement.xpath('xxxxxxxxxxxxxxxx')

如果匹配不到元素返回空数组

查找所有标签

python 复制代码
elements = rootElement.xpath('//*')
print(elements)

查找指定 id 的标签

python 复制代码
elements = rootElement.xpath('//*[@id="overlay"]')
print(elements)

查找指定 class 的标签

python 复制代码
elements = rootElement.xpath('//*[@class="login"]')
print(elements)

查找包含指定 class 的标签

python 复制代码
elements = rootElement.xpath('//*[contains(@class, "login")]')
print(elements)

复杂路径查找

示例1

1、查找 class 为login 的 header

2、在 header 下查找 class 包含content的 div

3、在 div 下查找所有 table 标签

python 复制代码
elements = rootElement.xpath('//header[@class="login"]/div[contains(@class, "content")]/table')
print(elements)
示例2

1、查找 id 为overlay 的 div

2、在 div 下查找第二个 div

3、在第二个 div 下查找所有 table 标签

python 复制代码
elements = rootElement.xpath('//div[@id="overlay"]/div[2]/table')
print(elements)

常见操作

获取所有标签的链接

python 复制代码
# 如果想获取其他属性值,把@后面改成对应的属性名称即可
urls = rootElement.xpath('//a/@href') 
print(urls)

获取 div 标签的文本内容, 其他标签类似

python 复制代码
pText = rootElement.xpath('//div[@class="login"]/text()')
print(pText)

其他元素操作

python 复制代码
elements = rootElement.xpath('//*')
for element in elements:
    print(element.text) # 文本不拼接(不包含子元素内的文本)
    print(element.text_content()) # 拼接元素内所有文本 

    # 获取 class 的值,如果想获取其他属性值改成对应属性名称即可
    # 使用get获取,如果没有值可以提供默认值
    print(element.get('class', '没有值')) 
    # print(element.get('class'))  
    
   	# 获取所有属性,类型 dict, key为属性名,value为属性值
    print(element.attrib) 

    if 'src' in element.attrib:
        print('src 属性存在')

    # 遍历属性
    attrib = element.attrib
    for key in attrib: 
        print(key, attrib[key])

    items = element.find('div')
    print(items) # 获取element下的所有 div 标签

	# 在 element 下查找所有 table 标签
    items = element.xpath('table') 
    print(items)

	# 在 element 下查找 id 为 overlay 的标签, 如果找不到返回 None
    items = element.get_element_by_id('overlay', None) 
    print(items)
    
相关推荐
Soari1 分钟前
GitHub 开源项目解析:D4Vinci/Scrapling —— Python 网页抓取与自动化处理工具
python·开源·github·python爬虫·网页抓取·异步抓取
oort1232 分钟前
VLStream 全开源决策式 AI 视频平台 技术视角完整说明
大数据·开发语言·人工智能·经验分享·python·开源·音视频
Cloud_Shy6182 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 10 - 12)
c语言·开发语言·网络·人工智能·windows·python·编辑器
承渊政道13 分钟前
【从零开始大模型开发与微调:基于PyTorch与ChatGLM】(新时代的曙光之大模型与人工智能)
人工智能·pytorch·python·深度学习·机器学习·语言模型·自然语言处理
一位代码1 小时前
微软开源项目MarkitDown:一款将pdf/word/ppt等各类文件转换为Markdown格式的python工具
python
Unbelievabletobe8 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
lpd_lt10 小时前
AI Coding的常用Prompt技巧
python·ai·ai编程
小江的记录本10 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处10 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
asdzx6710 小时前
使用 Python 快速提取 PDF 中的表格
python·pdf