码迷,mamicode.com
首页 > 其他好文 > 详细

页面内容解析

时间:2019-11-23 14:22:36      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:网络   html解析器   XML   class   怎么   实战   ref   rom   包括   

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

页面内容解析

标签:网络   html解析器   XML   class   怎么   实战   ref   rom   包括   

原文地址:https://www.cnblogs.com/cody-meng/p/11917297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!