Python 爬虫学习笔记 – 第二周/单元5/信息组织与提取方法

English Version: https://today2tmr.com/en/2017/07/16/python-spider-study-note-week-twounit-fiveway-to-organize-and-extract-information

信息标记的三种形式

信息标记

  • name
  • addr
  • 形成信息组织结构,增加信息维度
  • 可用于通信、存储和展示
  • 标记的结构具有重要价值
  • 更利于理解和利用

HTML的信息标记

  • WWW信息组织方式
  • 将声音、图像、视频等超文本信息嵌入到文本之中
  • 通过预定义<>…</>标签形式组织不同类型信息

三种形式

  • XML
    • <name>...</name>
    • <name />
    • <!-- -->
    • 标签 Tag
    • 名字 Name
    • 属性 Attribute
    • 若有内容 用一对 …
    • 若无内容 可用缩写形式
    • 注释 <!-->...<-->
  • JSON
    • "key" : "value"
    • "key" : ["value1, "value2]
    • "key" : {"subkey" : "subvalue"}
    • 有类型的键值对 key : value
    • 对类型的定义 键 key
    • 对值的描述 值 value
    • 键和值都需有双引号以表示字符串
    • 值有多个信息时用方括号[]组织
    • 嵌套使用时用大括号{}
    • 可作为JS等语言的一部分
  • YAML

    • 无类型键值对 key : value
    • 无双引号来表达类型
    • 用缩进形式表达所属关系
    • 用减号-表达并列关系,多个values
    • 用竖线|表达整块数据
    • #表示注释

三种信息标记形式的比较

  • XML eXtensible Markup Language

     

    • 扩展性强,繁琐
    • Internet的信息主要格式
  • JSON JavaScript Object Notation

     

    • 适合程序处理(js),较XML简洁
    • 程序对接口处理处,无注释
  • YAML YAML Ain’t Markup Language

     

    • 文本信息比例最高,可读性好
    • 配置文件,有注释易读

信息提取的一般方法

  • 从标记后的信息中提取所关注的内容
  • 完整解析信息标记形式,再提取关键信息
    • 用标记解析器,例如bs4库的标签树遍历
    • 优点:信息解析准确
    • 缺点:提取过程繁琐,速度慢
  • 无视标记形式,直接搜索关键信息
    • 对信息文本查找函数
    • 优点:简洁,速度块
    • 缺点:提取结果准确性与内容相关
  • 融合方法
    • 结合形式解析与搜索方法,提取关键信息
    • 需要标记解析器及文本查找函数

实例

提取HTML中所有URL链接

  1. 搜索所有<a>标签
  2. 解析标签提取href后的链接内容

     

基于bs4库的HTML内容查找方法

  • <>.find_all(name,attrs,recursive,string,**kwargs)
    • 返回列表类型,存储查找结果
    • name: 对标签名称的检索字符串
      • 单个参数用列表形式
      • 若name值为True,显示所有标签名称

         
      • 以b开头的标签的内容,引入新库re

         
    • attrs: 对属性值的检索字符串
      • 必须精确赋值信息

         
      • 或引入正则表达式库

         
    • recursive: 布尔型,是否对子孙全部节点搜索,默认为True

       
    • string: 对标签中间的字符串检索

       

      • 引入正则表达式

         
    • 简写:
      • <tag>(...) <=> <tag>.find_all(...)
      • soup(...) <=> soup.find_all(...)
  • <>.find() 搜索且只返回一个字符串结果
  • <>.find_parents() 在前辈节点中搜索,返回列表
  • <>.find_parent() 在前辈节点中搜索返回一个字符串结果
  • <>.find_next_siblings() 返回列表类型
  • <>.find_next_sibling() 返回字符串类型
  • <>.find_previous_sibling()
  • <>.find_previous_siblings()

单元小结

  • 信息标记的三种方法
  • 信息提取的一般方法

Leave a Reply

Your email address will not be published.