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(本 ...
随机推荐
- plink计算两个SNP位点的连锁不平衡值(LD)
PLINK提供了“--ld”的参数计算两个SNP位点的连锁不平衡值. 命令如下: plink --file file --ld rs123 rs134 --out rs123_rs134 生成如下数据 ...
- Day050--jQuery表单事件 轮播图 插件库 ajax
表单控件的事件 change()表单元素发生改变时触发事件 select()文本元素发生改变时触发事件 submit()表单元素发生改变时触发事件 .focus() 获取焦点 .blur() 释放焦点 ...
- java 键盘录入(Scanner)
键盘录入(Scanner)• 键盘录入数据概述– 我们目前在写程序的时候, 数据值都是固定的, 但是实际开发中, 数据值肯定是变化的, 所以, 把数据改进为键盘录入, 提高程序的灵活性.• 如何实现键 ...
- Jenkins-在windows上配置自动化部署(Jenkins+Gitblit)
Jenkins-在windows上配置自动化部署(Jenkins+Gitblit) 1. 安装好 Jenkins(注:安装目录需没有空格,否则安装gitlab hook 插件时会报错,安装在c盘跟目录 ...
- Python:Mac 下 MQTT 服务器 Mosquitto 的配置
我在Mac电脑上搭建时遇到了一些不同于网上大部分情况的问题,特此分享给可能也有遇到相同情况又找不到解决方法的人. 我的电脑系统:macOS Mojave 10.14.3. paho-mqtt 的安装 ...
- express session 和 socketio session关联
express session http是没有状态的协议, 需要web框架自己实现会话和会话管理工作. express框架有session插件可以使用. 见如下介绍: https://www.tuto ...
- (Python3) 求中位数 代码
def zhongweishu(a): new=sorted(a) if len(a)%2==0: s=(new[int(len(a)/2-1)]+new[int(len(a)/2)])/2 else ...
- mac air中编译安装swoole
本机php版本, 我的7.3.0 1 下载swoole源码 https://github.com/swoole/swoole-src/releases 我下载的版本是swoole-src-4.3.3. ...
- 【译】使用 Flutter 实现跨平台移动端开发
作者: Mike Bluestein | 原文地址:[https://www.smashingmagazine.com/2018/06/google-flutter-mobile-developm ...
- Hper-V卸载
1.txt文件输入以下内容,后缀改为cmd,以管理员身份执行 mountvol X: /s copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\ ...