文章目录
初始化解析器
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)