关于lxml的笔记

关于lxml的笔记

解析dom
from lxml import etree
dom = etree.HTML(html)
查看节点内容
etree.tostring(dom[0])
获取节点标签名
dom[0].tag
获取节点的父节点
dom[0].getparent()
获取某节点的属性节点的内容
dom[0].get(‘属性名称’)

xpth路径
/ 代表根节点
// 代表任意节点
绝对路径 page.xpath("/html/body/p")
相对路径 pape.xpath("/p")
. 选取当前节点
… 选取当前节点的父节点
@ 选取属性

xpath筛选
选取元素时列表,可通过索引查找[n]
筛选元素p = page.xpath("//p[@style=‘font-size:200%’]")
没有属性可通过text()(获取元素中文本)、position()(获取元素位置)、last()等进行筛选

/book/book[1] 选取book元素的第一个book元素
/div/div[last()] 选取div元素的最后的一个div元素
/div/div[option()❤️] 选取最前面的两个属于div元素的div元素
//title[@lang] 选取拥有名为lang属性的title元素
//title[@lang=’ eng’] 选取所有title元素,且这些元素拥有为eng的lang属性
/div/div[price>35.0] 选取div元素的所有div元素,且其中的price元素的值必须大于35.0
/div/div[price]/title 选取div元素中div元素的所有tilte元素,且其中的price元素的值须大于35.0

获取属性值
dom.xpth(".//a/@href")
获取文本
dom.xpath(".//a/text()")

//获取HTML的body部分
HTMLNode *node = [parser body];

//在node的基础上,找到并取得总结的那段话
HTMLNode *sum=[node findChildOfClass:@"lotconts" ];//这个方法就是查找一个属性,名字叫"lotconts"的节点

//在node的基础上,找到并取获取有效日期
HTMLNode *effectdate=[node findChildOfClass :@"datea"];

//在node的基础上,找到并取获取星座名字
HTMLNode *name=[node findChildTag:@"span"];//这个方法就是查找一个标签叫"span"的节点 

//在node的基础上,找到并取获取星座时间段
  HTMLNode *time=[name findChildTag:@“em”];
//获取星座图片的链接
   HTMLNode *image=[node findChildTag:@“img”];
  NSString *pic=[image getAttributeNamed:@“src”];
  NSURL *url1=[NSURL URLWithString:pic];

// 得到节点的内容
[name contents];//返回的就是一个字符串 在这里内容就是:巨蟹座
//同理
[sum contents];//内容


使用xpath函数,函数()内填写xpath语法,完成提取
1、获取所有的div标签【节点选取】
divs = html.xpath(’//div’)
print(divs)

###因为上面div返回的结果为element。所以使用tostring进行打印内容
for div in divs:
d = etree.tostring(div,encoding=‘uttf-8’).decode(‘utf-8’)
print(d)
break ##这里是为了仅打印一个结果,去掉break打印全部div标签
print(’*’*50)

###xpath提取的数据返回的结果是一个列表,而列表无法使用etree中的函数进行操作
2、获取指定的某个div标签【谓语的作用】
div = html.xpath(’//div[1]’)[0]
print(etree.tostring(div,encoding=‘utf-8’).decode=(‘utf-8’))

3、获取所有的id=‘even’的div标签
divs = html.xpath(’//div[@id=“even”])

for div in divs:
d = etree.tostring(div,encoding=‘utf-8’).decode(‘utf-8’)
print(d)

4、获取标签的某个属性值
###获取所有的第v的id属性的值
divs = html.xpath(’//div/@id’)
print(divs)

###获取所有的a标签下的href属性的值
hrefs = html.xpath(’//a/@href’)
print(hrefs)

####/@可以用来获取属性的值

##所有的职位信息都存在第一个div标签中,div标签中除了的第一个以外的标签会含有我们想要的信息
5、获取div里面所有的职位信息
divs = html.xpath(//div)[1:]
#divs = html.xpath(’//div[position()>1]’)

divs = html.xpath(’//div’)[1:]
for div in divs:
d = etree.tostring(div,encoding=“utf-8”).decode(‘utf-8’)
print(d)

####获取数据以后,要提取重复的信息可以使用循环
for div in divs:
#获取标签href属性
url = div.xpath(’.//a/@href’)
#获取啊标签的文本信息
position = div.xpath(’.//a/text()’)
print(position)
break
####此时打印 的结果就是一个列表,修改一下
for div in divs:
#获取标签href属性
url = div.xpath(’.//a/@href’)[0]
#获取啊标签的文本信息
position = div.xpath(’.//a/text()’)[0]
print(position)
break
####这时打印的结果就是字符串了

6、存储信息
###获取div中的所有的信息
divs = html.xpath(’//div’)[1:]
work = []
for div in divs:
work = {}
#获取标签href的值
url = div.xpath(’.//a/@href’)[0]
#获取a标签的文本信息
position = div.xpath(.//a/@text()’)[0]
#获取工作类型
work_type = div.xpath(’’.//span[2]/text()’)[0]
#获取在职人数
work_num = div.xpath(’.//span[3]/text()’)[0]
#新建空字典,存储所有的信息
work = {
“url”:url,
“position”:position,
“work_type”:work_type,
“work__num”:work_num,
}
####for循环中的每一次结果添加至列表中
works.append(work)
href = div.tostring(div,encoding=‘utf-8’).decode(‘utf-8’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值