parsel库是Python中用于解析HTML文件的库,其能通过CSS选择器、xpath、正则表达式来定位html中的元素。
通过css选择器定位元素
from parsel import Selectorhtml = """
<html><head><a class="option1">这是一个伪html片段1</a><a class="option1">这是一个伪html片段2</a><a class="option2" name="name2" id="a3"><li class="option1" id="list1">张三</li><li class="option1" id="list2">李四</li><li class="option2" id="list3">王五</li></a><div class="option2" name="name2" id="a4"><li class="option1" id="list1">赵六</li><li class="option1" id="list2">钱七</li><li class="option2" id="list3">孙八</li></div></head>
</html>
"""
# 这里返回的是一个Selctor对象
selector = Selector(text=html)"""
定位元素
"""
# 通过CSS选择器使用类定位a元素。
# 这里返回的值仍然是一个Selector对象,因此可以继续套用xpath、正则表达式
css_items = selector.css('.option1')# 使用xpath表达式定位a元素
xpath_item = selector.xpath('//a[@name="name2"]')# 对xpath_item继续套用xpath选择器来选择子元素。
# 注意这里必须要在xpath表达式前添加. ,以表示从当前位置查找
wang_wu = xpath_item.xpath('./li[@class="option2"]')# 如果想要通过css选择器来定位子孙元素,则使用css选择器的子孙节点语法
a_li = selector.css('a li')"""
获取元素的html的文本
"""
# 通过get方法可获得第1个元素的html文本。如上面的css_items中,满足class="option1"的元素有6个,get方法仅返回第1个
print('get方法获取到的内容为:',css_items.get())# 如果想要获取全部元素的html,则需要使用getall方法
print('getall方法获取到的内容为:',css_items.getall())"""
获取元素的属性值
"""
# 获取使用css选择器定位到的元素的属性值的方法是加上::attr(属性值)来获取
id3 = selector.css('#a3::attr(name)').get()
print("id为a3的元素的name属性值为:",id3)# 获取使用xpath表达式定位到的元素的属性值的方法是加上/@属性值
li2 = selector.xpath('//div/li[2]/@class').get()
print('div的第二个li子元素的class属性值为:',li2)
打印内容如下: