Python爬虫(四)lxml、xpath

安装

pip install lxml

模块导入

from lxml import etree



使用xpath查询
解析html源代码,得到html节点对象
html=etree.HTML(r.text)
查看html元素节点的内容
print(etree.tostring(html,encoding="utf-8").decode("utf-8"))

查找节点

xpath() 返回查找到的元素列表
nodename,直接写节点名称,查找标签,/代表层级
html.xpath("head") #查找head标签
html.xpath("head/title") #查找head标签下的title标签
html.xpath("body/div") #查找body下的所有div列表,bs4的.语法只能找到第一个
 
/开头代表最顶层
html.xpath("/html/head") #查找根节点下的html节点下一层的head
//代表从任意位置查找节点
html.xpath("//img") #查找任意位置的img标签,所有的img标签列表
html.xpath("//li/div") #查找所有li标签下面的div标签


属性查找 @ 符号使用

html.xpath("//li[@class='column']") #查找class是column的所有li元素列表
如果有多个class,比如<div class='nav1 nav2 nav3'>
html.xpath("//div[@class='nav1']") #无法找到
html.xpath("//div[@class='nav1 nav2 nav3']")  #可以找到
属性查找的是等于class的,少一个字符都不行

contains()函数,xpath语法的包含
html.xpath("//div[contains(@class,'nav1')]") # class中包含nav1的所有div节点

. 当前层级
div.xpath(".//img/@src")
搜索div当前节点下的所有img的src属性列表

.. 上一层及


谓语


html.xpath("//li[@class='column'][1]") # 找到class为column的li标签的第一个元素
html.xpath("//li[@class='column']/ul/li[1]") # 找到class为column的li标签下的ul下的第一个li
last() 最后一个
html.xpath("//li[@class='column']/ul/li[last()]") # ul下的最后一个li
html.xpath("//li[@class='column']/ul/li[last()-1]") # ul下的倒数第二个li
html.xpath("//li[@class='column']/ul/li[last()-1]") # ul下的倒数第二个li

position()
html.xpath("//li[@class='column']/ul/li[position()=2 or position()=4]") # ul下的第二个li 和第四个li
html.xpath("//li[@class='column']/ul/li[position()>=2 and position()<=4]") # ul下的第2、3、4个li 

text搜索
不用@,后续补充

选取未知节点

未知节点类型
html.xpath("//*[@class='column']") # 找到class为column的所有节点
未知属性名
html.xpath("//*[@*='container']") # 选取任意属性为container的所有节点
未知属性值,只知道有该属性
html.xpath("//*[@data-id]") # 选取包含data-id属性的所有标签,不考虑属性值
选取标签下的所有节点
node() 获取所有子孙节点,包括换行。等于bs4里面的contents
html.xpath("//head/node()") 

xpath运算符

 

获取文本和属性

文本

text()  只能获取该节点的文本
string() 获取该节点下和所有子孙节点的所有文本
html.xpath("//h1/text()") # 返回的是列表集
html.xpath("//h1//text()") # 搜索h1节点下的所有文本列表
html.xpath("string(//div)") # 获取第一个div下的所有文本内容

属性获取

标签/@属性
html.xpath("//img/@src") #获取所有img标签的src属性,列表

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值