重点推荐这种解析方式,xpath是最常用且最便捷高效的一种解析方式,通用性

1、解析原理

1、实例化一个etree的对象,且需要将被解析的页面源码数据加载到改对象中。

2、调用etree对象中的xpath方法结合表达式实现标签的定位和内容的捕获

2、环境的安装

1、pip install lxml  (lxml是一种解析器)

3、如何实例化一个etree对象    from lxml import etree

1、将本地的html文档中的源码数据加载到etree对象中

etree.parse(filePath)

2、可以将从互联网上获取的源码数据加载到该对象中

etree.HTML('page_text')

4、xpath('xpath表达式')

  -- /:表示的是从根节点开始定位,表示的是一个层级

-- //:表示的是多个层级,可以表示从任意位置开始定位

-- 属性定位://div[@class='sort']     tag[@attrName='attrValue']

  --索引定位://div[@class='sort']/p[3]  索引从1开始的

-- 取文本        /text()  获取的是标签中直系的文本内容

        //text()  获取的是所有后代的文本内容

-- 取属性    /@attrName   /src

一个错误:

lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 3 and head, line 3, column 87

解决办法:
自己创建html解析器,增加parser参数 from lxml import etree
parser = etree.HTMLParser(encoding="utf-8")
htmlelement = etree.parse("baidu.html", parser=parser)
print(etree.tostring(htmlelement, encoding="utf-8").decode("utf-8"))
原文链接:https://blog.csdn.net/Kwoky/java/article/details/81099697
import  requests
from lxml import etree
if __name__ == '__main__':
parser = etree.HTMLParser(encoding="utf-8")
#实例化好了一个etree对象,且将被解析的源码加载到该对象中
tree = etree.parse('test2.html',parser=parser)
#r = tree.xpath('/html/head/title') #[<Element title at 0x27230787248>]
#r = tree.xpath('/html//title') #[<Element title at 0x222b0a57408>]
#r= tree.xpath('//li[@class="sort"]') #[<Element title at 0x25dd0f77048>]
#r = tree.xpath('//li[@class="sort"]/p[2]') # [<Element title at 0x25dd0f77048>]
r = tree.xpath('//li[@class="sort"]//a/text()')
print(r) #[<Element li at 0x135d9b37448>]

最新文章

  1. 使用Junit对Spring进行单元测试实战小结
  2. PyMongo下载及安装
  3. Ninth scrum meeting - 2015/11/3
  4. C语言内存对齐详解(3)
  5. .NET本质论(4)应用程序对象HttpApplication
  6. C 基于socket实现简单的文件传输
  7. Java连接oracle数据库的OCI和THIN
  8. Android实例-调用系统APP(XE10+小米2)
  9. 转载 .htaccess文件RewriteRule语法规则
  10. javascript cookie 操作
  11. 得到当前堆栈信息的两种方式(Thread和Throwable)的纠结
  12. mvn export runnable jar
  13. 误删除了Oracle的dbf文件后的解决方法
  14. [GitPython]使用python管理你的git库
  15. [LeetCode141]Linked List Cycle
  16. java深拷贝和浅拷贝
  17. centos7 源码安装php7
  18. Tcp三次挥手和四次挥手
  19. Azure ARM (18) 将Azure RM Manage Disk托管磁盘的Image,跨订阅迁移
  20. Linux版本CentOS、Ubuntu和Debian的异同

热门文章

  1. Java实现 蓝桥杯VIP 算法提高 超级玛丽
  2. Java实现 LeetCode 168 Excel表列名称
  3. Java实现 LeetCode 120 三角形最小路径和
  4. 【JAVA习题二十八】海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
  5. iOS -实现imageView中的button响应点击事件的方法
  6. String Problem(模板)【最短路】
  7. 网页中为什么常用AT替换@(repost from https://zhidao.baidu.com/question/122291.html)
  8. f(t) = t的傅里叶系数
  9. VMware历史版本下载【1.0~3.0】
  10. Day8-微信小程序实战-交友小程序-首页用户列表渲染及多账号调试及其点赞功能的实现