页面内容解析
Posted cody-meng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了页面内容解析相关的知识,希望对你有一定的参考价值。
1 常用的页面内容解析的库
页面解析是我们写爬虫获取数据的最终目的。在python中常用的爬虫解析的库包括:
- lxml
- bs4
- re
- pyquery
在使用这些包对html页面进行解析的时候,应该先了解一下基本的概念:
- 元素:通常直接用标签名表示该元素
- 元素间的关系:根元素、父元素、子元素、孙子元素
思考如下的问题:
- 1. 怎么定位到要获取的数据所在的元素
- 2. 怎么从元素中得到想要的数据:想要的数据可能是元素的内容,也可能是元素的属性值
思考问题1答案:怎么定位到要获取的数据所在的目标元素,即定位目标元素位置
1. 直接根据标签名进行定位
2. 使用标签名和标签的属性进行定位
思考问题2答案:怎么获取想要的数据, 即数据的解析
1. 数据是元素的内容
2. 数据是元素的标签属
2 常用的包的使用详解
(1)xpath
- 数据的读取
1 from lxml import etrre 2 3 """构造xpath解析对象""" 4 5 # 1. 从文本 6 text = "<root><a x=‘123‘>aText<b/><c/><b/></a></root>" 7 root = etree.HTML(text) 8 9 # 2. 从文件 10 parse = etree.HTMLParser() # 自定义html解析器 11 html = etree.parse("file.html", parse)
- 使用xpath定位目标节点的方法:路径表达式 + 谓语
- 首先我们应该知道当前构建的xpath解析对象的当前节点是什么。(注意使用etree.HTML()方法的时候会自动为当前的标签添加<html></html>根标签如果没有)
- 路径表达式:
-
text = "<root><a x=‘123‘>aTextx</a></root>" root = etree.HTML(text) print(etree.tostring(root)) # <html><body><root><a x="123">aText</a></root></body></html> # 目标节点:<a =‘123‘>aText</a>
# 当前节点: <html></html>a = root.xpath("/html/body/root/a") # 根节点 / print(a) # [<Element a at 0x1178ca188>] b = root.xpath(".//root/a") # 当前节点选取root子孙节点, 其中.可以省略,"//root/a" print(b) # [<Element a at 0x1178ca188>] c = root.xpath("./body/root/a") # 当前节点选取body子节点,这里的.不能省略,省略了就是根节点了 print(c) # [<Element a at 0x1178ca188>]
(2)bs4
(3)re
参考:
1. https://lxml.de/tutorial.html#parsing-from-strings-and-files
2. [Python3网络爬虫开发实战] 4.1-使用XPath
以上是关于页面内容解析的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023