需求:
爬取数据时用到了、记录一下
模块介绍:
通常用于解析 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