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的使用方法(代码注释详细)

str_html='''
<ul class="subject-list">
    <li class="subject-item1">
      <p>item1</p>
      <div class="pic">
        <a class="nbg" href="https://book.test.com/item1" onclick="moreurl(this,{i:'0',query:'',subject_id:'35546622',from:'book_subject_search'})"></a>
      </div>  
    </li>
    <li class="subject-item2 item2">
      <div class="pic">
        <a class="nbg" href="https://book.test.com/item2" onclick="moreurl(this,{i:'1',query:'',subject_id:'35005103',from:'book_subject_search'})">
        </a>
      </div>
    </li> 
    <li class="subject-item3" name='item3'>
      <div class="pic">
        <a class="nbg" href="https://book.test.com/item3" onclick="moreurl(this,{i:'2',query:'',subject_id:'26435630',from:'book_subject_search'})">
        </a>
      </div>
    </li>
    </ul>
'''
#修复html
#etree模块可以修复HTML文档,将缺少的部分补齐
from lxml import etree
text_html=etree.HTML(str_html)
results=etree.tostring(text_html)
print(results.decode('utf-8'))

#1 //与/的区别,//获取当前节点下的所有节点(子孙节点),/获取当前节点(子节点)
#//ul/a取得ul下直接子节点(子节点)a标签,//ul//a取得ul下所有节点(子孙节点)的a标签
result1=text_html.xpath('//ul/a')
print('1',result1)
result2=text_html.xpath('//ul//a')
print(result2)
print()

#2 在选取节点时,可使用@符号将属性过滤,test()文本获取
result3=text_html.xpath('//ul/li[@class="subject-item1"]/p/text()')
print('2',result3)
print()

#3 属性获取
#使用@属性名形式获取
result4=text_html.xpath('//ul/li[@class="subject-item1"]/div/a/@href')
print('3',result4)
print()

#4 属性多值匹配
#适用多个属性匹配过滤
result5=text_html.xpath('//ul/li[@class="subject-item3" and @name="item3"]/div/a/@href')
print('4',result5)
print()

#5 按序选择
result6=text_html.xpath('//ul/li[1]/div/a/@href')#获取第一个li标签
result7=text_html.xpath('//ul/li[last()-1]/div/a/@href')#获取倒数第二个标签,last代表最后一个节点,可进行加减运算
result8=text_html.xpath('//ul/li[position()<3]/div/a/@href')#获取位置小于3的标签
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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜小白也想的美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值