python etree htm参数_python笔记1--lxml.etree解析html

前言

lxml是一种使用Python编写的库,可以迅速、灵活地处理XML和HTML,学过xpath定位的,可以立马上手

使用环境:

python3.7

lxml 4.3.3

lxml安装

pip install lxml,安装报错;指定版本为4.4.3时,安装成功

pip show lxml查看版本号

html解析

这里用到etree.HTML方法把html的文本内容解析成html对象

要打印html内容,可以用etree.tostring方法,encoding="utf-8"参数可以正常输出html里面的中文内容。pretty_print=True是以标准格式输出

# coding:utf-8

from lxml import etree

htmldemo = '''

yoyo ketang

yoyoketang

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

...

'''

# etree.HTML解析html内容

demo = etree.HTML(htmldemo)

# 打印解析内容str

t = etree.tostring(demo, encoding="utf-8", pretty_print=True)

print(t.decode("utf-8"))

运行结果

yoyo ketang

yoyoketang

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

...

soupparser解析器

soupparser解析器比上面的etree.HTML容错性要好一点,因为其处理不规范的html能力比etree强太多。

import lxml.html.soupparser as soupparser

demo = soupparser.fromstring(htmldemo)

t = etree.tostring(demo, encoding="utf-8", pretty_print=True)

print(t.decode("utf-8"))

xpath使用案例

使用html解析器,最终是想获取html上的某些元素属性和text文本内容,接下来看下,用最少的代码,简单高效的找出想要的内容。

比如要获取“这里是我的微信公众号:yoyoketang

# coding:utf-8

from lxml import etree

htmldemo = '''

yoyo ketang

yoyoketang

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

...

'''

# etree.HTML解析html内容

demo = etree.HTML(htmldemo)

rs=demo.xpath('//p[@class="yoyo"]')

t=rs[0].text

print(t)

运行结果:

从代码量上看,简单的三行代码就能找到想要的内容了,rs是xpath定位获取到的一个list对象,会找出所有符合条件的元素对象。可以用for循环查看详情。

# coding:utf-8

from lxml import etree

htmldemo = '''

yoyo ketang

yoyoketang

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

...

'''

# etree.HTML解析html内容

demo = etree.HTML(htmldemo)

rs=demo.xpath('//p[@class="yoyo"]')

print(rs) #list对象

for j in rs:

#打印定位到的内容

print(etree.tostring(j,encoding="utf-8",pretty_print=True).decode("utf-8"))

print(j.attrib)

运行结果

[]

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

{'class': 'yoyo'}

二次查找

通过xpath定位语法//p[@class="yoyo"]定位到的是class="yoyo"这个元素以及它的所有子节点,如果想定位其中一个子节点,可以二次定位,继续xpath查看,如获取:python笔记

# coding:utf-8

from lxml import etree

htmldemo = '''

yoyo ketang

yoyoketang

这里是我的微信公众号:yoyoketang

fiddler教程,

python笔记,

selenium文档;

快来关注吧!

...

'''

# etree.HTML解析html内容

demo = etree.HTML(htmldemo)

rs=demo.xpath('//p[@class="yoyo"]')

print(rs[0].text)

rs1=rs[0].xpath('//a[@id="link2"]')

print(rs1[0].text)

rs2=demo.xpath('//a[@id="link2"]')

print(rs2[0].text)

运行结果

Xpath

注意

etree.toString()返回的是bytes类型,需要调用decode方法将其转换成String类型

经过处理后的html代码,会被自动修复,添加缺少的标签。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值