Python 爬虫学习笔记 – 第二周/单元4/Beautiful Soup库入门

English Version: https://today2tmr.com/en/2017/07/15/python-spider-study-note-week-twounit-fourintroduction-to-beautiful-soup

Beautiful Soup is library of the third party to analyze HTML and XML.

Beautiful Soup库的安装

  • 美丽汤
  • http://www.crummy.com/software/BeautifulSoup
  • pip install beautifulsoup4
  • 打开网页 http://python123.io/ws/demo.html
  • 源代码:
    • 通过浏览器

       
    • 通过Requests库

       

小测

 

使用

  • 注意大小写敏感。
  • from bs4 import BeautifulSoup
  • soup = BeautifulSoup('<p>data</p>',
    'html.parser')

BeautifulSoup库的基本元素

理解

  • 解析、遍历、维护 标签树 的功能库。
  • <p>..</p>标签
    • 名称成对出现,第一名称后面有属性域,含属性名和属性值
  • HTML->标签树->BeautifulSoup类
  • 可用字符串,或打开文档提供解析内容

解析器

  • bs4 for HTML: BeautifulSoup(mk,'html.parser')
  • lxml for HTML: BeautifulSoup(mk,'lxml')
    • 需安装 pip install lxml
  • lxml for XML: BeautifulSoup(mk,'xml')
    • 需安装 pip install lxml
  • html5lib: BeautifulSoup(ml,'html5lib')
    • 需安装 pip install html5lib

基本元素

基本元素 说明
Tag 标签,基本信息组织单元,用<>和</>标明开头结尾
Name 标签名字,<p>...</p>的名字即为’p’,格式:<tag>.name
Attributes 标签属性,字典形式,格式:<tag>.attrs
NavigableString 非属性字符串,<>…</>中的字符串,格式:<tag>.string
Comment 标签内字符串的注释部分

标签的方法

  • 若存在多个同样标签,返回第一个

     
  • 可用.name获取标签名字,.parent访问上一级标签

     
  • 可用.attrs获得标签属性,返回字典,可用字典访问方式操作

     
  • NavigableString可跨越多个标签层次,跨越b标签

     
  • Comment文本显示时未标明<!-->..<-->

     

BeautifulSoup类方法总结

  • .<tag>获取标签
  • .name获取名字
  • .attrs获取属性
  • .string获取非属性字符串或注释

基于bs4库遍历HTML内容的方法

下行遍历

属性 说明
.contents 子节点列表,将<tag>所有子节点存入列表
.children 子节点迭代类型,与.contents类似,用于循环遍历子节点
.descendants 子孙节点的迭代类型,包含所有子孙节点,用于循环遍历

 

儿子节点不仅仅包括标签,还包括字符串

  • for child in soup.body.children
  • for child in soup.body.descendants

上行遍历

属性 说明
.parent 节点的父亲标签
.parents 节点的先辈标签,用于循环遍历

 

  • 最高级标签的父亲是自己
  • soup父亲为空
  • 遍历标签会遍历到soup本身,soup.parent不存在.name信息,故而用if判断

平行遍历

属性 说明
.next_sibling 返回下一个平行节点
.previous_sibling 返回上一个平行节点
.next_siblings 迭代类型,返回后续所有平行节点
.previous_siblings 迭代类型,返回前续所有平行节点

 

  • 平行遍历发生在同一父节点下
  • 标签树中NavigableString也可构成节点
  • for sibling in soup.a.next_siblings
  • for sibling in soup.a.previous_siblings

基于bs4库的HTML格式输出

  • 如何让HTML内容友好显示?
  • prettify()以增加换行符

     
  • 编码均被转换为utf-8

单元小结

  • 概念
  • 引入
  • 五种基本元素
  • 遍历方法

One Reply to “Python 爬虫学习笔记 – 第二周/单元4/Beautiful Soup库入门”

Leave a Reply

Your email address will not be published.