页面内容解析

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

publiccms中将推荐页的内容显示在页面片段中

切换页面后标签内容消失

Ajax 片段元标记 - Googlebot 未读取页面内容

详解Android WebView加载html片段

在解析页面内容时删除 DocDocument 警告