当前位置:   article > 正文

Python(爬虫)——lxml库_python lxml

python lxml

安装模块

lxml

pip install lxml

认识lxml

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择。

xpath表达式常用语法

/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

xpath的使用方法(代码注释详细)

  1. str_html='''
  2. <ul class="subject-list">
  3. <li class="subject-item1">
  4. <p>item1</p>
  5. <div class="pic">
  6. <a class="nbg" href="https://book.test.com/item1" onclick="moreurl(this,{i:'0',query:'',subject_id:'35546622',from:'book_subject_search'})"></a>
  7. </div>
  8. </li>
  9. <li class="subject-item2 item2">
  10. <div class="pic">
  11. <a class="nbg" href="https://book.test.com/item2" onclick="moreurl(this,{i:'1',query:'',subject_id:'35005103',from:'book_subject_search'})">
  12. </a>
  13. </div>
  14. </li>
  15. <li class="subject-item3" name='item3'>
  16. <div class="pic">
  17. <a class="nbg" href="https://book.test.com/item3" onclick="moreurl(this,{i:'2',query:'',subject_id:'26435630',from:'book_subject_search'})">
  18. </a>
  19. </div>
  20. </li>
  21. </ul>
  22. '''
  23. #修复html
  24. #etree模块可以修复HTML文档,将缺少的部分补齐
  25. from lxml import etree
  26. text_html=etree.HTML(str_html)
  27. results=etree.tostring(text_html)
  28. print(results.decode('utf-8'))
  29. #1 ///的区别,//获取当前节点下的所有节点(子孙节点),/获取当前节点(子节点)
  30. #//ul/a取得ul下直接子节点(子节点)a标签,//ul//a取得ul下所有节点(子孙节点)的a标签
  31. result1=text_html.xpath('//ul/a')
  32. print('1',result1)
  33. result2=text_html.xpath('//ul//a')
  34. print(result2)
  35. print()
  36. #2 在选取节点时,可使用@符号将属性过滤,test()文本获取
  37. result3=text_html.xpath('//ul/li[@class="subject-item1"]/p/text()')
  38. print('2',result3)
  39. print()
  40. #3 属性获取
  41. #使用@属性名形式获取
  42. result4=text_html.xpath('//ul/li[@class="subject-item1"]/div/a/@href')
  43. print('3',result4)
  44. print()
  45. #4 属性多值匹配
  46. #适用多个属性匹配过滤
  47. result5=text_html.xpath('//ul/li[@class="subject-item3" and @name="item3"]/div/a/@href')
  48. print('4',result5)
  49. print()
  50. #5 按序选择
  51. result6=text_html.xpath('//ul/li[1]/div/a/@href')#获取第一个li标签
  52. result7=text_html.xpath('//ul/li[last()-1]/div/a/@href')#获取倒数第二个标签,last代表最后一个节点,可进行加减运算
  53. result8=text_html.xpath('//ul/li[position()<3]/div/a/@href')#获取位置小于3的标签
  54. print('5',result6,'\n',result7,'\n',result8)

XPath 运算符

下面列出了可用在 XPath 表达式中的运算符:

运算符描述实例返回值
|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80

如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 false。

!=不等于price!=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

<小于price<9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

<=小于或等于price<=9.80

如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。

>大于price>9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。

>=大于或等于price>=9.80

如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 false。

orprice=9.80 or price=9.70

如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 false。

andprice>9.00 and price<9.90

如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 false。

mod计算除法的余数5 mod 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/591630
推荐阅读
相关标签
  

闽ICP备14008679号