lxml库
lxml库
lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML数据。
基本使用:
1.我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码不规范,他会自动的进行补全。
#使用lxml的etree库
from lxml import etree text = """
<div id="usrbar" alog-group="userbar" alog-alias="hunter-userbar-start"></div>
<ul id="header-link-wrapper" class="clearfix">
<li><a href="https://www.baidu.com/" data-path="s?wd=">网页</a></li>
<li style="margin-left:21px;"><span>新闻</span></li>
<li><a href="http://tieba.baidu.com/" data-path="f?kw=">贴吧</a></li>
<li><a href="https://zhidao.baidu.com/" data-path="search?ct=17&pn=0&tn=ikaslist&rn=10&lm=0&word=">知道</a></li>
<li><a href="http://music.baidu.com/" data-path="search?fr=news&ie=utf-8&key=">音乐</a></li>
<li><a href="http://image.baidu.com/" data-path="search/index?ct=201326592&cl=2&lm=-1&tn=baiduimage&istype=2&fm=&pv=&z=0&word=">图片</a></li>
<li><a href="http://v.baidu.com/" data-path="v?ct=3019898888&ie=utf-8&s=2&word=">视频</a></li>
<li><a href="http://map.baidu.com/" data-path="?newmap=1&ie=utf-8&s=s%26wd%3D">地图</a></li>
<li><a href="http://wenku.baidu.com/" data-path="search?ie=utf-8&word=">文库</a></li>
<div class="header-divider"></div>
</ul>
</div>
"""
#利用etree.HTML,将字符串解析为HTML文档
html_text = etree.HTML(text) #html_text为Element对象 (可以执行xpath语法) #将字符串序列化HTML文档
result = etree.tostring(html_text,encoding='utf-8').decode('utf-8') print(result)
2.从文件中读取html代码:
from lxml import etree #读取外部文件 hello.html
html = etree.parse('hello.html')
result = etree.tostring(html,pretty_print=True,encoding='utf-8').decode('utf-8')
print(result)
在上代码中,如果html代码不是很规范的话会报错,这时就要更改解析器
from lxml import etree #读取外部文件 hello.html
parser = etree.HTMLParser(encoding='utf-8') #用html解析器
html = etree.parse('hello.html',parser=parser) #.parse默认解析是以xml 我们要解析html就要改为HTML解析器
result = etree.tostring(html,pretty_print=True,encoding='utf-8').decode('utf-8') print(result)
lxml结合xpath:
from lxml import etree parser = etree.HTMLParser(encoding='utf-8')
html = etree.parse("tencent.html",parser=parser) #1.获取所有tr标签
#trs = html.xpath("//tr")
#for tr in trs:
# print(etree.tostring(tr,encoding='utf-8').decode("utf-8")) #2.获得第2个tr标签
#tr = html.xpath("//tr[2]")[0]
#print(etree.tostring(tr,encoding='utf-8').decode("utf-8")) #3.获取所有class等于even的tr标签
#trs = html.xpath("//tr[@class='even']")
#for tr in trs:
# print(etree.tostring(tr,encoding='utf-8').decode("utf-8")) #4.获取所有a标签的href属性
# trs = html.xpath("//a/@href") #只选择href的值 跟上面不同的是不是一个标签内容
# for tr in trs:
# print(tr) #5.获取所有的职位信息(纯文本)
trs = html.xpath("//tr[position()>1]")
positions = []
for tr in trs:
href = tr.xpath(".//a/@href")[0] # .意思是在当前标签(第一个tr)下查找
fullurl = "http://hr.tencent.com/" + href
title = tr.xpath("./td[1]//text()")
category = tr.xpath("./td[2]/text()")
nums = tr.xpath("./td[3]/text()")
address = tr.xpath("./td[4]/text()")
pubtime = tr.xpath("./td[5]/text()") position = {
'url': fullurl,
'title': title,
'category': category,
'nums': nums,
'address':address,
'pubtime': pubtime
} positions.append(position)
print(positions)
lxml库的更多相关文章
- windows下使用pip安装python的第三方lxml库
lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库.lxml库的安装和python其他第三方库的安装方法是一样的,只是可能由于一些细节上的失误导致安装失败. 工具 Pyt ...
- Python爬虫11-XML与XPath概述及lxml库的应用
GitHub代码练习地址:用lxml解析HTML,文件读取,etree和XPath的配合使用:https://github.com/Neo-ML/PythonPractice/blob/master/ ...
- Windows环境下使用pip install安装lxml库
lxml是Python语言和XML以及HTML工作的功能最丰富和最容易使用的库.lxml是为libxml2和libxslt库的一个Python化的绑定.它与众不同的地方是它兼顾了这些库的速度和功能完整 ...
- python简单爬虫 用lxml库解析数据
目标:爬取湖南大学2018年本科招生章程 url:http://admi.hnu.edu.cn/info/1026/2993.htm 页面部分图片: 使用工具: Python3.7 火狐浏览器 PyC ...
- python lxml库生成xml文件-节点命名空间问题
lxml库,处理xml很强大,官方文档:https://lxml.de/tutorial.html#namespaces 例如: 我们要生成如下格式的报文: <ttt:jesson xmlns: ...
- 12.Python爬虫利器三之Xpath语法与lxml库的用法
LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...
- xpath教程 2 - lxml库
xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...
- 爬虫 (3)- lxml库和贴吧图片下载案例
lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据. lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解 ...
- python爬虫之路——初识lxml库和xpath语法
lxml库:是xml解析库,也支持html文档解析功能,实用功能:自动修正补全html代码. 使用流程:①导入lxml中的etree库,②利用etree.HTML(文件名)或etree.parse(本 ...
随机推荐
- Codeforces Round #549 (Div. 2) 训练实录 (5/6)
The Doors +0 找出输入的01数列里,0或者1先出完的的下标. Nirvana +3 输入n,求1到n的数字,哪个数逐位相乘的积最大,输出最大积. 思路是按位比较,从低到高,依次把小位换成全 ...
- CF487E Tourists--圆方树
既然有这条性质,这题就很简单了: \(可能在a->b的简单路径上的点集,就是圆方树上a->b路径上方点代表的点双的并集\) 对每一个方点维护一个\(multiset\),代表其在圆方树上子 ...
- jsp:include动作功能
jsp:plugin动作:连接客户端的Applet或Bean插件 jsp:useBean动作:应用javaBean组件 jsp:setProperty动作:设置javaBean属性 jsp:getPr ...
- k8s常用命令演示
kubectl run --image=xxx name_xx --port kubectl run --image=nginx nginx-app --port=80 kubectl expose ...
- 关于Mac 系统mysql 乱码问题
这是由于客户端和服务端的编码没有同一 首先我们先在终端连接mysql 连接方法 mysql -u 用户名 -p 即可 然后输入你的密码 这里就不多说了 然后我们输入 show variabl ...
- Python正则表达式指南(转)
目录 Python正则表达式指南(转) 0.防走丢 1. 正则表达式基础 1.1. 简单介绍 1.2. 数量词的贪婪模式与非贪婪模式 1.3. 反斜杠的困扰 1.4. 匹配模式 2. re模块 2.1 ...
- 【bzoj 3495】PA2010 Riddle
Description 有n个城镇被分成了k个郡,有m条连接城镇的无向边.要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都. Input 第一行有三个整数,城镇数n(1<=n&l ...
- react中根据后台值动态配置
业务中我们要实现对应的数据是1是男,2是女,这就要根据键来进行动态匹配,通常后台来给你一个1或者2,你来进行匹配,这样的数据一般在表格中比较常见. <Card title="Mock- ...
- java多线程基础篇第一篇
1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...
- SqlServer查询某数据在某表某列中
create proc spFind_Column_In_DB ( @type int,--类型:为文字类型.为数值类型 @str nvarchar(100)--需要搜索的名字 ) as --创建临时 ...