xpath解析

Posted jnhnsnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath解析相关的知识,希望对你有一定的参考价值。

解析原理:

  实例化etree对象

  加载被解析的页面源码数据到该对象

  调用etree中的xpath方法结合xpath表达式实现标签定位和内容获取

pip3 install lxml

from lxml import etree

实例化 

  - etree.parst(本地html文档路径)

  - etree.HTML(page_text) #互联网获取的源码数据

xpath表达式:

  技术图片

 

   

from lxml import etree
import requests
url = http://www.shicimingju.com/book/sanguoyanyi.html
headers = {
User-Agent: Mozilla/5.0 (Linux; android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Mobile Safari/537.36
}
"""
使用lxml.etree.parse()解析html文件,该方法默认使用的是“XML”解析器,所以如果碰到不规范的html文件时就会解析错误,报错代码如下:

lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 3 and head, line 3, column 87

解决办法:
自己创建html解析器,增加parser参数
parser = etree.HTMLParser(encoding="utf-8")
"""
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse(test.html,parser=parser)
print(tree.xpath(/html/body/div))
# /表示从根节点开始定位 一个/表示一个层级
print(tree.xpath(/html//div))
print(tree.xpath(//div)) #任意位置定位
#属性定位 div[@attrName = ‘attrvalue‘]
print(tree.xpath(//div[@class="poem"])) #class为poem的div
#索引定位 从1开始索引
print(tree.xpath(//li[3]))
#取文本 取属性:
print(tree.xpath(//span/text())) #返回列表  /text()直系文本内容 //text()所有文本内容
print(tree.xpath("//div[@class=‘poem‘]/a/@href"))  #/@属性名称 ==》取属性值

技术图片

 

 

  

以上是关于xpath解析的主要内容,如果未能解决你的问题,请参考以下文章

2023爬虫学习笔记 -- 优化xpath解析代码

Perl,如何解析 XML 文件,xpath

Python Xpath的解析,应用

使用 xpath 在 Java 中使用名称空间解析 XML

爬虫解析:XPath总结

5.网络爬虫——Xpath解析