Open zshuangyan opened 5 years ago
lxml中有两个子模块etree和html,可以直接调用etree的方法解析HTML字符串或文件,也可以调用html的方法来解析HTML的字符串或文件,目前测试四种解析方法,只有一种解析出了正确的结果。
test.html
<html> <head>test</head> <body> <dl> <dt> <h1>h1</h1> <dl> <dt> <h3>h3</h3> </dt> <dt> <h3>h3</h3> </dt> </dl> </dt> </dl> </body> </html>
测试脚本
from lxml import etree, html import os DIR_PATH = os.path.dirname(__file__) with open(os.path.join(DIR_PATH, "test.html")) as f: text = f.read() doc = etree.HTML(text) result = doc.xpath('/html/body/dl/dt')[0] print("使用etree.HMTL接口") print("能够正确解析子元素个数: ", len(result) == 2) print("---------------------------------------------") doc1 = html.fromstring(text) result = doc1.xpath('/html/body/dl/dt')[0] print("使用html.fromstring接口") print("能够正确解析子元素个数: ", len(result) == 2) print("---------------------------------------------") html1 = etree.parse(os.path.join(DIR_PATH, "test.html")) result = html1.xpath('/html/body/dl/dt')[0] print("使用etree.parse接口") print("能够正确解析子元素个数: ", len(result) == 2) print("---------------------------------------------") html2 = html.parse(os.path.join(DIR_PATH, "test.html")) result = html2.xpath("/html/body/dl/dt")[0] print("使用html.parse接口") print("能够正确解析子元素个数: ", len(result) == 2)
测试结果:
使用etree.HMTL接口 能够正确解析子元素个数: False --------------------------------------------- 使用html.fromstring接口 能够正确解析子元素个数: False --------------------------------------------- 使用etree.parse接口 能够正确解析子元素个数: True --------------------------------------------- 使用html.parse接口 能够正确解析子元素个数: False
lxml中有两个子模块etree和html,可以直接调用etree的方法解析HTML字符串或文件,也可以调用html的方法来解析HTML的字符串或文件,目前测试四种解析方法,只有一种解析出了正确的结果。
test.html
测试脚本
测试结果: