首页 > 其他分享 >lxml

lxml

时间:2024-02-23 17:45:29浏览次数:21  
标签:lxml 元素 html 选取 book bookstore 节点

下载安装

https://pypi.python.org/pypi/lxml/3.4.2#downloads
pip install lxml

基本语法

2.1
    表达式	    描述
    nodename	选取此节点的所有子节点。
    /	        从根节点选取。
    //	        从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    .	        选取当前节点。
    ..	        选取当前节点的父节点。
    @	        选取属性。
    a/text()	选取a标签下的文本
    string(.)	解析出当前节点下所有文字
    string(..)	解析出父节点下所有文字
    
[例子1]
    bookstore	    选取 bookstore 元素的所有子节点。
    /bookstore	    选取根元素 bookstore。
        注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
    bookstore/book	选取属于 bookstore 的子元素的所有 book 元素。
    //book	        选取所有 book 子元素,而不管它们在文档中的位置。
    bookstore//book	选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
    //@lang	        选取名为 lang 的所有属性
 [例子2]
    /bookstore/book[1]	            选取属于 bookstore 子元素的第一个 book 元素。
    /bookstore/book[last()]	        选取属于 bookstore 子元素的最后一个 book 元素。
    /bookstore/book[last()-1]	    选取属于 bookstore 子元素的倒数第二个 book 元素。
    /bookstore/book[position()<3]	选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
    //title[@lang]	                选取所有拥有名为 lang 的属性的 title 元素。
    //title[@lang='eng']	        选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
    /bookstore/book[price>35.00]	选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
    /bookstore/book[price>35.00]/title	选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
    
    

2.2 XPath 轴
    ancestor	        选取当前节点的所有先辈(父、祖父等)。
    ancestor-or-self	选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
    attribute	        选取当前节点的所有属性。
    child	            选取当前节点的所有子元素。
    descendant	        选取当前节点的所有后代元素(子、孙等)。
    descendant-or-self	选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
    following	        选取文档中当前节点的结束标签之后的所有节点。
    namespace	        选取当前节点的所有命名空间节点。
    parent	            选取当前节点的父节点。
    preceding	        选取文档中当前节点的开始标签之前的所有节点。
    preceding-sibling	选取当前节点之前的所有同级节点。
    self	            选取当前节点。
    [例子]
    child::book	        选取所有属于当前节点的子元素的 book 节点。
    attribute::lang	    选取当前节点的 lang 属性。
    child::*	        选取当前节点的所有子元素。
    attribute::*	    选取当前节点的所有属性。
    child::text()	    选取当前节点的所有文本子节点。
    child::node()	    选取当前节点的所有子节点。
    descendant::book	选取当前节点的所有 book 后代。
    ancestor::book	    选择当前节点的所有 book 先辈。
    ancestor-or-self::book	选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
    child::*/child::price	选取当前节点的所有 price 孙节点。
    
 
 2.3功能函数 
starts-with	    //div[starts-with(@id,”ma”)]	选取id值以ma开头的div节点
contains	    //div[contains(@id,”ma”)]	    选取所有id值包含ma的div节点
and	            //div[contains(@id,”ma”) and contains(@id,”in”)]	选取id值包含ma和in的div节点
text()	        //div[contains(text(),”ma”)]	    选取节点文本包含ma的div节点
                //*[@id='app']/descendant::div[@class='stock-name']/text()

CCS选择器语法  

语法	        说明
*	            选择所有节点
#container	    选择id为container的节点
.container	    选择所有class包含container的节点
div,p	        选择所有 div 元素和所有 p 元素
li a	        选取所有li 下所有a节点
ul + p	        选取ul后面的第一个p元素
div#container > ul	选取id为container的div的第一个ul子元素
ul ~p	            选取与ul相邻的所有p元素
a[title]	        选取所有有title属性的a元素
a[href=”http://baidu.com”]	选取所有href属性为http://baidu.com的a元素
a[href*=”baidu”]	        选取所有href属性值中包含baidu的a元素
a[href^=”http”]	            选取所有href属性值中以http开头的a元素
a[href$=”.jpg”]	            选取所有href属性值中以.jpg结尾的a元素
input[type=radio]:checked	选择选中的radio的元素
div:not(#container)	        选取所有id为非container 的div属性
li:nth-child(3)	        选取第三个li元素
li:nth-child(2n)	    选取第偶数个li元素
a::attr(href)	        选取a标签的href属性
a::text	                选取a标签下的文本
  
from lxml import etree # 加载模块
html_data = etree.HTML(html) 
print(etree.tostring(html))
content = html_data.xpath("/html/head/title/text()")
response.xpath("//tr[not(@class)]")
response.xpath("//li[@class=' left pic_logo']/img/@src").extract_first("")
response.xpath('//li[@class="hp-dropDownMenu"][position()<=4]/a')
response.xpath('//table[@class="players_table bott"]//tr[not(@class)]')
response.xpath("//a[@class='noactive' and @id='next']") #多重属性查找
html.xpath('//li/a[@href]/text()') #返回a标签中有属性href的内容
html.xpath('//li/a/@href'))      #返回a标签href属性的值
html.xpath('.//a[@class="huxing"]/span[not(@class="building-area")]/text()' 
for d in html_data.xpath("/html/head/title/:
    print(d.text)
    [ 'addnext', 'addprevious', 'append', 'attrib', 'base', 'clear', 'cssselect', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 
'getnext', 'getparent', 'getprevious', 'getroottree', 'index', 'insert', 'items', 'iter', 'iterancestors', 'iterchildren', 'iterdescendants', 'iterfind', 'itersiblings',
'itertext', 'keys', 'makeelement', 'nsmap', 'prefix', 'remove', 'replace', 'set', 'sourceline', 'tag', 'tail', 'text', 'values', 'xpath'] node = html_data.xpath("/html/head/title") content = html_data.xpath("body/div/div[@id='id2']/ul/li[1]/div[2]/a/@href") 获取文本 /html/title/text() 获取属性 /html/link/@href 获取列表 /html/a 当前节点 ./ 上一级节点 ../ 获取列表中第一个 /html/a[1] 取列表中最后一个 /html/a[last()] 取前两个 /html/a[position()<3] 或者 /html/a[1]|/html/a[3] //a[1]|//[3] 当前节点中某个位置标签 /html//a 选择id或者class固定的标签 /html/a[@id="id"] /html/a[@class="class"] 获取当前标签下所有标签的文本 /html/a//text() 根据文本筛选 //a[text() = '下一页'] 原文:https://blog.csdn.net/qq_40942329/article/details/79755339

Example

 html='''<div id="content">   
   <ul id="useful">
      <li>有效信息1</li>
      <li>有效信息2</li>
      <li>有效信息3</li>
   </ul>
   <ul id="useless">
      <li>无效信息1</li>
      <li>无效信息2</li>
      <li>无效信息3</li>
   </ul>
</div>
<div id="url">
   <a href="http://cighao.com">陈浩的博客</a>
   <a href="http://cighao.com.photo" title="陈浩的相册">点我打开</a>
</div>'''

from lxml import etree
# 假设已经存在 html 变量,值为上面的源码
selector = etree.HTML(html)
# 提取 li 中的有效信息123
content = selector.xpath('//ul[@id="useful"]/li/text()')
for each in content:
    print(each)
#提取 a 中的属性
link = selector.xpath('//a/@href')
for each in link:
    print(each)

title = selector.xpath('//a/@title')
for each in title:
    print(each)   
    
<2>
wb_data = b"""
        <html><body><div>
        <style>
        a{
        color:#456;
        }
        </style>
           <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0 a"><a href="link5.html">fifth item</a>
         <span class="ah" style="background: rgba(0, 0, 0, 0) url('/images/upload/advertisement/1/1480322326.jpg') no-repeat scroll center center;">hello</span>
             </li></ul> 
         </div>
        </body></html>
        """
#print(type(wb_data))
html = etree.HTML(wb_data)
#print(html)
print(html.xpath('//li[@class]/a/text()'))
print(html.xpath("//span[@class='ah']/@style"))

for box in html.xpath('//ul/li'):
    print('a=',box.xpath('a/text()'))
    etree.tostring(box, method='html') #查看html

  

 

标签:lxml,元素,html,选取,book,bookstore,节点
From: https://www.cnblogs.com/boye169/p/18030053

相关文章

  • Python通过Lxml库解析网络爬虫抓取到的html
    ​Lxml是基于libxml2解析库的Python封装。libxml2是使用C语言编写的,解析速度很好,不过安装起来稍微有点复杂。安装说明可以参考(http://Lxml.de/installation.html),在CentOS7上中文安装说明(http://www.cjavapy.com/article/64/),使用lxml库来解析网络爬虫抓取到的HTML是一种非常......
  • 安装 lxml==4.5.1版本报错
    前言全局说明安装lxml==4.5.1版本时,报错:一、先说解决方法原因:可能是模块指定版本太老,需要的python版本也要旧一些,安装3.10.11和3.9都不行,解决:降到3.8.10就可以了安装包名:python-3.8.10-amd64.exe有的说jiang到python==3.9.12也可以(我没试,就直接用我之前安装......
  • 在Mac上安装lxml
    最近想开始学习一下爬虫,用来截取一些网页中的段落文字、列表、表格等信息。联想到HTML的DOM树结构,就想是不是用XPath来解析会比较合适。于是自己想从Python结合XPath的方向入手来实现网页内容解析。提到Python与XPath结合,就要用到lxml这个包了。它是一款由StefanBehnel等开发者......
  • 【爬虫】python数据挖掘-lxml模块-3
    Python爬虫掌握lxml模块中使用xpath语法定位元素提取属性值或文本内容掌握lxml模块中etree.tostring函数的使用1.lxml模块的安装与使用示例lxml模块是一个第三方模块,安装之后使用1.1lxml模块的安装对发送请求获取的xml或html形式的响应内容进行提取pip/pip3installlxml知识......
  • lxml的实际使用
    点击查看代码html=etree.HTML(resp.text)divs=html.xpath("/html/body/div[6]/div/div/div[2]/div[5]/div[1]/div")fordivindivs:companyName=div.xpath("./div/div/a[1]/div[1]/p/text()")[1].strip()price=div.xpath("./div/di......
  • 假期小结8XML之LXML
    这桌我初步学习了爬虫相关知识的python库LXML的一些基本用法以下是我的部分总结lxml是Python中一个流行的第三方库,用于处理XML和HTML数据。它提供了高效且易于使用的工具,使你能够解析、操作和生成XML和HTML文档。下面是关于lxml库的一些基础知识:安装:你可以使用pip命令来安装......
  • python爬虫学习小记——lxml板块
    python爬虫学习小记——lxml板块lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。XPath的选择功能......
  • Python win11 安装lxml 失败
    如果你有一个项目执行了requirements后,一直提示lxml失败,解决步骤如下1、尝试升级pippython.exe-mpipinstall--upgradepip2、尝试下载包手动安装下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml选择:lxml‑4.9.0‑cp311‑cp311‑win_amd64.whl3、python第三方......
  • readability-lxml 源码解析(三):`readability.py`
    #!/usr/bin/envpythonfrom__future__importprint_functionimportloggingimportreimportsysfromlxml.etreeimporttounicodefromlxml.etreeimport_ElementTreefromlxml.htmlimportdocument_fromstringfromlxml.htmlimportfragment_fromstringfrom......
  • readability-lxml 源码解析(一)
    browser.pydefopen_in_browser(html):"""OpentheHTMLdocumentinawebbrowser,savingittoatemporaryfiletoopenit.Notethatthisdoesnotdeletethefileafteruse.Thisismainlymeantfordebugging."......