学习自:

python3解析库lxml - Py.qi - 博客园

lxml官方文档

lxml官方文档——lxml中的类、方法使用,如果需要查看某些方法的具体用法,就到这个网页下

python爬虫系列--lxml(etree/parse/xpath)的使用

0、简介

lxml是Python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,且效率很高。

功能:

①解析HTML:使用etree.HTML(text)将字符串格式的html片段解析成html文档;

②读取xml文件

③etree和XPath的配合使用,提取元素节点

1、etree

0)方法

方法(均需加etree.前缀) 说明
HTML(html_text) 将字符串格式的文本转化为html文档格式
XML(xml_text) 将字符串格式的文本转化为xml文档格式
to_string() 以上两个方法转化后的文档格式并不能直接输出,该方法可以显示文档源码
parse()

应用语法解析器parser对对象进行解析;这里的对象可以是1)文件名/路径;2)文件对象;3)采用HTTP、FTP协议的URL;

返回一个ElementTree对象

   

1)etree.HTML(text)

作用:将字符串格式的文件转化为html文档

from lxml import etree
text = '''
<body>
<div>
<ul>
<li>01</li>
<li>02</li>
          ...
<li>06</li>
<li>07
</ul>
</div>
</body>
'''
html=etree.HTML(text) #将字符串格式的文件转化为html文档
print(html)
print('!!!!!!!!')
str=etree.tostring(html).decode()#tostring将html文档转化为二进制的字符串格式
                    #decode解码二进制,显示html源代码
print(str)

输出:

<Element html at 0x1a1ab4e4188> #直接输出html的结果
!!!!!!!!
<html><body>
<div>
<ul>
<li>01</li>
...
</ul>
</div>
</body>
</html>

代码解释:上文首先声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。这里需要注意的是,HTML文本最后一个li是没有闭合的,但是HTML方法可以自动修正为正确格式的HTML文本。

此时再调用tostring()方法就可以输出修正后的HTML代码,但是结果是bytes,需要利用decode()将之转换为string。

2)etree.parse

应用语法解析器对对象进行解析,常用于对html文件或HTTP URL,需指定解析器,返回一个XPath可解析对象

用法:

html=etree.parse('xxx.html',etree.HTMLParser())

3)xpath方法

用途:对以上两种方法提取到的解析对象进行XPath语法提取相关元素节点。

用法:

result=html.xpath('XPath路径表达式')

这里的XPath路径表达式的写法与之前所写完全相同,不再赘述。

提取结果为一个List,其中每一项都为从原始文本中提取到的要素项,访问时可以直接通过切片访问:

result[0]#第一个节点
.
.
.
result[-1]#最后一个节点

与Scrapy中的response.xpath方法相类比,可以认为这里的html.xpath就是response.xpath.extract的结果。

访问每一项时都是通过切片访问。

以上是使用lxml库进行XPath提取的一些基本知识点,由于很多内容已经在本博客XPath和Scrapy几节说过了,所以这里部分知识点知识简单说明。

使用lxml进行要素提取的一个基本流程总结:

from lxml import etree

#提取待解析对象
html=etree.HTML(str)#将某个str解析为HTML对象
html=etree.parse('xxx.html',etree.HTMLParser())#将某个html文件或者网页解析为HTML对象


#从HTML对象中进行XPath提取
result=html.xpath('xpath路径表达式')
print(result[n])#输出第n项提取项

#如果要输出解析对象
str=etree.tostring(html).decode()

如果需要从一个网页提取信息,则需要向网页发送请求,对请求结果中的Text部分进行以上操作:

headers={
'User-Agent':'...'
}
response=requests.get(url,headers=headers)#由此得到了一个html对象
#待解析对象就保存在了response.text中
r=response.text html=etree.HTML(r) ...#以下就和上一个代码接轨了

Python:lxml的更多相关文章

  1. Python之lxml

    作者:Shane 出处:http://bluescorpio.cnblogs.com lxml takes all the pain out of XML. Stephan Richter lxml是 ...

  2. Python:渗透测试开源项目

    Python:渗透测试开源项目[源码值得精读] sql注入工具:sqlmap DNS安全监测:DNSRecon 暴力破解测试工具:patator XSS漏洞利用工具:XSSer Web服务器压力测试工 ...

  3. Python:bs4的使用

    概述 bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签. 一.初始化 from bs4 import BeautifulSoup soup ...

  4. Python:bs4中 string 属性和 text 属性的区别及背后的原理

    刚开始接触 bs4 的时候,我也很迷茫,觉得 string 属性和 text 属性是一样的,不明白为什么要分成两个属性. html = '<p>hello world</p>' ...

  5. Windows下Python安装lxml

    1.下载easy_install的安装包,下载地址:https://pypi.Python.org/pypi/setuptools 我是Windows7,所以直接下载Windows(Simplify) ...

  6. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

  7. Python:开发Sublime插件,方便PHP开发

    Python:开发Sublime插件,方便PHP开发 背景 最近在学习PHP,开发环境选择了Sublime2,开发过程发现执行PHP程序非常不方便,需要自己在浏览器中输入路径以进行调试,这点不如Dre ...

  8. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)

    Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...

  9. Python:Python学习总结

    Python:Python学习总结 背景 PHP的$和->让人输入的手疼(PHP确实非常简洁和强大,适合WEB编程),Ruby的#.@.@@也好不到哪里(OO人员最该学习的一门语言). Pyth ...

随机推荐

  1. 从零开始, 开发一个 Web Office 套件 (2): 富文本编辑器

    书接前文: 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Of ...

  2. IntelliJ IDEA 热部署,修改java文件 不用重启tomcat

    详情见大佬:https://www.cnblogs.com/chenweichu/articles/6838842.html

  3. Mysql-5.7主从部署-yum方式

    一.环境准备 # rpm -qa |grep mariadb |xargs yum remove -y # setenforce 0(临时关闭),(selinux配置文件:SELINUX=disabl ...

  4. ApacheCN C/C++ 译文集(二) 20211204 更新

    编写高效程序的艺术 零.序言 第一部分:性能基础 一.性能和并发性介绍 二.性能测量 三.CPU 架构.资源和性能 四.内存架构和性能 五.线程.内存和并发 第二部分:高级并发 六.并发和性能 七.并 ...

  5. 对于fetch的理解

    在一篇文章里见到一位作者是这么说的 XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱,而且基于事件的 ...

  6. GC基础知识

    内存溢出和内存泄漏 内存溢出(Out Of Memory) 就是申请内存时,JVM没有足够的内存空间.通俗说法就是去蹲坑发现坑位满了. 内存泄露 (Memory Leak) 就是申请了内存,但是没有释 ...

  7. 总结一下Mac快捷键的图形符号

    Mac中主要有四个修饰键,分别是Command,Control,Option和Shift.这四个键分别有自己的图案,他们经常出现在Mac应用程序中的菜单栏里,方便你随时学习新的快捷键.

  8. 版本控制SVN

    为什么需要版本控制软件 代码的冻结 避免在重大的考核之前改动代码 每个稳定版本都在服务器保存进度,随时可以回退 需求频繁的变化不要改动稳定的代码,不要改别人写好的代码 为什么需求会变化?有时候产品自己 ...

  9. shell脚本三剑客之awk

    shell脚本之awk命令 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 适合小型文本数据 1.工作原理 2.AWK格式 3.按行输入文本 4.按字段输入文本 5.通过管道符号,双引号调 ...

  10. Python--列表简介

    Python--列表简介 目录 Python--列表简介 一.列表 1. 访问列表元素 2. 索引从0而不是1开始 3. 使用列表中的各个值 二.修改.添加和删除元素 1. 修改列表元素 2. 在列表 ...