python爬虫中 lxml etree的相关使用

import requests
from lxml import etree

url = 'https://dblp.org/pers/hd/p/Petersen:Karin'
html = requests.get(url)
html = etree.HTML(html.text) #初始化生成一个XPath解析对象
items = html.xpath('//div[contains(@class,"data")]/span//text()')
for i in items:
    print(i)

下面是表达式的常用用法:

路径表达式:

表达式描述
nodename选取此节点的所有子节点
/从当前节点选取直接子节点
//从当前节点选取子孙节点
.选取当前节点
..选取当前节点的父节点
@选取属性
*通配符,选择所有元素节点与元素名
@*选取所有属性
[@attrib]选取具有给定属性的所有元素
[@attrib='value']选取给定属性具有给定值的所有元素
[tag]选取所有具有指定元素的直接子节点
[tag='text']选取所有具有指定元素并且文本内容是text节点
html.xpath('//li')   #获取所有子孙节点的li节点
html.xpath('//li/a') #获取所有子孙节点的li节点下的所有直接a节点
result=html.xpath('//li[@class="item"]') 匹配class="item"的li
html.xpath('//a[@href="tab"]/../@class') 获取a的父节点的class值
html.xpath('//a[@href="tab"]/parent::*/@class')获取a的父节点的class值


html.xpath('//li[@class="item"]/a/text()') #获取a节点下的内容
html.xpath('//li[@class="item"]//text()') #获取li下所有子孙节点的内容
html.xpath('//li/a/@href')  #获取a的href属性
html.xpath('//li//@href')   #获取所有li子孙节点的href属性

按熟悉选择
html.xpath('//li[@class="aaa"]/a') 只能匹配class仅为'aaa'的节点
html.xpath('//li[contains(@class,"aaa")]/a') 匹配class有'aaa'的节点


#and or 的用法
html.xpath('//li[@class="aaa" and @name="fore"]/a/text()')
html.xpath('//li[contains(@class,"aaa") and @name="fore"]/a/text()')

#按顺序选择
html.xpath('//li[1]/a/text()') #获取第一个li下a的内容
html.xpath('//li[last()]/a/text()') #获取最后一个li下a的内容
html.xpath('//li[position()>2 and position()<4]/a/text()') #获取大于2小于4的
html.xpath('//li[last()-2]/a/text()') #获取倒数第三个


#XPath提供了很多节点选择方法,包括获取子元素、兄弟元素、父元素、祖先元素等,示例如下:
html.xpath('//li[1]/ancestor::*')  #获取所有祖先节点
html.xpath('//li[1]/ancestor::div')  #获取div祖先节点
html.xpath('//li[1]/attribute::*')  #获取所有属性值
html.xpath('//li[1]/child::*')  #获取所有直接子节点
html.xpath('//li[1]/descendant::a')  #获取所有子孙节点的a节点
html.xpath('//li[1]/following::*')  #获取当前子节之后的所有节点
html.xpath('//li[1]/following-sibling::*')  #获取当前节点的所有同级节点

 

 

内容参考博客:https://www.cnblogs.com/zhangxinqi/p/9210211.html

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值