Python爬虫学习笔记(XPath选择器【推荐】)

Xpath常用规则

 

Xpath常用运算符

 

from lxml import etree
text = '''一段HTML'''
html = etree.HTML(text) #初始化构造Xpath解析对象


html1 = etree.parse(html,etree.HTMLParser())#解析HTMl代码


result = etree.tostring(html) #修正HTML代码并输出
result1 = html1.xpath('//*') #选取所有节点
result2 = html1.xapth('//li') #获取所有的li节点,结果为列表形式
result3 = html1.xpath('//li/a')#获取所有li节点下的所有直接a节点
result4 = html1.xpath('//ul//a')#获取ul节点下的所有a节点

result5 = html1.xapth('//a[@href="link4.html"]/../@class') #获取hreflink4.htmla节点,然后在获取父节点,然后再获取其class属性
#result5等价于result5 = html.xpath('//a[@href="link4.html"]/parent..*/@class')
result6 = html1.xpath('//li[@class="item-0"]') #选择属性为item-0li标签
result7 = html1.xpath('//li[@class="item-0"]//text()') #选择属性为item-0li标签中的文本,也可以使用'//li[@class="item-0"]/a/text()'
result8 = html1.xpath('//li/a/@href') #获取所有li节点下的所有a节点的所有href属性,与获取某个属性result5做出区别
result9 = html1.xpath('//li[contains(@class="li")]/a/text()') #匹配class属性中包含li;属性中具有多个值,对其中一个值进行属性匹配
result10 = html1.xpath('//li[contains(@class,"li") and @name="item"]/a/text') #匹配class属性中包含liname属性为itemli节点

result11 = html1.xpath('//li[1]/a/text()') #选取第一个li节点下的a节点中的文本
result12 = html1.xpath('//li[last()]/a/text()') #选取最后一个li节点下的a节点中的文本
result13 = html1.xpath('//li[position()<3]/a/text()') #选取位置小于3li节点下的a节点中的文本
result14 = html1.xpath('//li[last()-2]/a/text()') #选取倒数第三个li节点下的a节点中的文本

result15 = html1.xpath('//li[1]/ancestor::*') #匹配第一个li节点的所有祖先节点
result16 = html1.xpath('//li[1]/ancestor::div') #匹配第一个li节点的所有div祖先节点
result17 = html1.xpath('//li[1]/attribute::*') #匹配第一个li节点的所有属性值
result18 = html1.xpath('//li[1]/child::a[@href="link1.html"]') #匹配第一个li节点下的所有href="link1.htmla子节点
result19 = html1.xpath('//li[1]/descendant::span') #匹配第一个li节点所有的span子孙节点
result20 = html1.xpath('//li[1]/following::*[2]') #匹配第一个li节点之后的第二个后续节点,*为所有后续节点
result21 = html1.xpath('//li[1]/following-sibling::*') #匹配第一个li节点之后的所有后续同级节点


print(result.decode('utf-8')) #bytes类型转成str类型
print(result1) #打印HTML中出现的所有代码
print(result2[0])
# print(result3)
# print(result4)
# print(result5)
# print(result6)
# print(result7)
# print(result8)
# print(result9)

发布了33 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_33360009/article/details/104203017