首页 > 其他分享 >lxml 库 etree 模块。

lxml 库 etree 模块。

时间:2023-02-02 16:46:49浏览次数:43  
标签:xpath lxml etree text li html 模块 选取 节点

需求:

爬取数据时用到了、记录一下

模块介绍:

通常用于解析 HTML文件。

爬虫常用方法:

(随着反爬工具越来越完善、一般很少可以直接爬取到页面了、一般都是通过Seleium 配合进行页面数据抓取、当然 也有其他更好的替代方案、只是这种方案 我相对熟悉 、毕竟测试出身嘛、哈哈)

lxml 使用:

html = etree.HTML(text) #初始化生成一个XPath解析对象
etree.tostring(html,encoding='utf-8')   #解析成字节
etree.tostringlist(html) #解析成列表

html.xpath('//li[@class="item-1"]/a/text()') # 文字 /text() 当前节点、//text() 当前节点下所有子孙节点
html.xpath('//li[@class="item-1"]/a/@href') # 链接地址 /@href 当前节点、//@href 当前节点下所有子孙节点
html.xpath('//li[contains(@class,"aaa")]/a/text()') # contains(@class,'name') 匹配全部的元素 并按列表返回
html.xpath('//li[contains(@class,"aaa") and @name="fore"]/a/text()') # 不同的属性可以用 and进行 多值处理
result=html.xpath('//li[1]/ancestor::*')  #获取所有祖先节点
result1=html.xpath('//li[1]/ancestor::div')  #获取div祖先节点
result2=html.xpath('//li[1]/attribute::*')  #获取所有属性值
result3=html.xpath('//li[1]/child::*')  #获取所有直接子节点
result4=html.xpath('//li[1]/descendant::a')  #获取所有子孙节点的a节点
result5=html.xpath('//li[1]/following::*')  #获取当前子节之后的所有节点
result6=html.xpath('//li[1]/following-sibling::*')  #获取当前节点的所有同级节点

nodename    选取此节点的所有子节点
/    从当前节点选取直接子节点
//    从当前节点选取子孙节点
.    选取当前节点
..    选取当前节点的父节点
@    选取属性
*    通配符,选择所有元素节点与元素名
@*    选取所有属性
[@attrib]    选取具有给定属性的所有元素
[@attrib='value']    选取给定属性具有给定值的所有元素
[tag]    选取所有具有指定元素的直接子节点
[tag='text']    选取所有具有指定元素并且文本内容是text节点


i.attrib # 标签属性获取、可迭代对象
i.attrib.iterkeys() # 标签属性名称、可迭代对象
i.attrib.itervalues() #标签属性值、可迭代对象
i.attrib.iteritems() # 属性的迭代传递?
"""

 

lxml 使用:
html = etree.HTML(text) #初始化生成一个XPath解析对象 etree.tostring(html,encoding='utf-8')   #解析成字节 etree.tostringlist(html) #解析成列表
html.xpath('//li[@class="item-1"]/a/text()') # 文字 /text() 当前节点、//text() 当前节点下所有子孙节点 html.xpath('//li[@class="item-1"]/a/@href') # 链接地址 /@href 当前节点、//@href 当前节点下所有子孙节点 html.xpath('//li[contains(@class,"aaa")]/a/text()') # contains(@class,'name') 匹配全部的元素 并按列表返回 html.xpath('//li[contains(@class,"aaa") and @name="fore"]/a/text()') # 不同的属性可以用 and进行 多值处理 result=html.xpath('//li[1]/ancestor::*')  #获取所有祖先节点 result1=html.xpath('//li[1]/ancestor::div')  #获取div祖先节点 result2=html.xpath('//li[1]/attribute::*')  #获取所有属性值 result3=html.xpath('//li[1]/child::*')  #获取所有直接子节点 result4=html.xpath('//li[1]/descendant::a')  #获取所有子孙节点的a节点 result5=html.xpath('//li[1]/following::*')  #获取当前子节之后的所有节点 result6=html.xpath('//li[1]/following-sibling::*')  #获取当前节点的所有同级节点
nodename  选取此节点的所有子节点 / 从当前节点选取直接子节点 //  从当前节点选取子孙节点 . 选取当前节点 ..  选取当前节点的父节点 @ 选取属性 * 通配符,选择所有元素节点与元素名 @*  选取所有属性 [@attrib] 选取具有给定属性的所有元素 [@attrib='value'] 选取给定属性具有给定值的所有元素 [tag] 选取所有具有指定元素的直接子节点 [tag='text']  选取所有具有指定元素并且文本内容是text节点

i.attrib # 标签属性获取、可迭代对象 i.attrib.iterkeys() # 标签属性名称、可迭代对象 i.attrib.itervalues() #标签属性值、可迭代对象 i.attrib.iteritems() # 属性的迭代传递? """

标签:xpath,lxml,etree,text,li,html,模块,选取,节点
From: https://www.cnblogs.com/yc-c/p/17086470.html

相关文章