xpath

这篇博客通过Python的lxml库展示了XML和HTML的解析方法,包括使用XPath选取元素、获取属性值以及遍历节点等内容。示例中详细演示了如何提取书籍标题、价格等信息,并展示了如何针对特定属性筛选元素。
摘要由CSDN通过智能技术生成
 
  1. from lxml import etree

  2.  
  3. s="""

  4. <?xml version="1.0" encoding="UTF-8"?>

  5. <bookstore>

  6. <book>

  7. <title lang="eng">Harry Potter</title>

  8. <price>29.99</price>

  9. </book>

  10. <book>

  11. <title lang="eng">Learning XML</title>

  12. <price>39.95</price>

  13. </book>

  14. </bookstore>

  15. """

  16.  
  17. #将变量读取为html对象,自动添加<html><body>... ...</body></html>

  18. html=etree.HTML(s)

  19.  
  20. #解析数据 /根节点

  21. data1=html.xpath('/html')

  22. for i in data1:

  23. print(i)

  24.  
  25. #//后面根子孙节点,后面的节点可以在任意位置

  26. data2=html.xpath('//title')

  27. for i in data2:

  28. print(i)

  29.  
  30. #写具体路径

  31. data3=html.xpath('/html/body/bookstore/book/price')

  32. for i in data3:

  33. print(i.text)

  34.  
  35.  
  36. #循环某个属性

  37. data4=html.xpath('/html/body/bookstore/book/title/@lang')

  38. for i in data4:

  39. print(i)

  40.  
  41.  
  42. #代表当前节点,..代表父节点

  43. data5=html.xpath('/html/body/bookstore/book/title')

  44. for i in data5:

  45. a=i.xpath('./@lang')

  46. print(a)

  47.  
  48. #读取某一个节点

  49. data6=html.xpath('/html/body/bookstore/book')

  50. for i in data6:

  51. ti_1=i.xpath('./title[1]')

  52. print(ti_1)

  53. ti_last=i.xpath('./title[last()]')

  54. print(ti_last)

  55.  
  56. #带有某些属性的标签

  57. data7=html.xpath('//book/title[@lang="eng"]')

  58. for i in data7:

  59. print(i.text)

  60.  
  61. #*位置节点

  62. data8=html.xpath('//book/*')

  63. for i in data8:

  64. print(i)

  65. if hasattr(i,'text'):

  66. print(i.text)

  67. else:

  68. print(i)

 
  1.  
  2. from lxml import etree

  3.  
  4. doc='''

  5. <div>

  6. <ul>

  7. <li class="item-0"><a href="link1.html">first item</a></li>

  8. <li class="item-1"><a href="link2.html">second item</a></li>

  9. <li class="item-inactive"><a href="link3.html">third item</a></li>

  10. <li class="item-1"><a href="link4.html">fourth item</a></li>

  11. <li class="item-0"><a href="link5.html">fifth item</a> </li>

  12. </ul>

  13. </div>

  14. '''

  15.  
  16.  
  17.  
  18. #将字符串解析为html对象,补全html,body

  19. html=etree.HTML(doc)

  20. #将a标签的文本直接获取//text()

  21. data2=html.xpath('//li/a/text()')

  22. print(data2)

  23.  
  24. #解析html文件

  25.  
  26. parser=etree.HTMLParser(encoding='utf-8')

  27. html_file=etree.parse('123.htm',parser=parser)

  28.  
  29. #匹配任意节点

  30. data3=html_file.xpath('//*')

  31. for i in data3:

  32. if hasattr(i,'text'):

  33. print(i.text)

  34.  
  35.  
  36. #解析带属性的a标签的text文本

  37. data4=html_file.xpath('//li/a[@href="link2.html"]/text()')

  38. print(data4)

  39.  
  40. #解析属性的值

  41. data5=html_file.xpath('//li/a/@href')

  42. print(data5)

  43.  
  44.  
  45. #谓语

  46. data6=html_file.xpath('//li[last()]/a/text()')

  47. print(data6)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值