005 Python网络爬虫与信息提取 Beautiful Soup库入门

Beautiful Soup库的中文文档https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#

 

[A] Beautiful Soup库简介

    Beautiful Soup库,也叫 beautifulsoup4 库 或 bs4 库

    Beautiful Soup库可以对爬取的任何 html 和 XML 进行解析,它将爬取的内容当做一锅汤,可以巧妙地煲好这锅汤。

 

[B] Beautiful Soup库安装

    1. Pycharm 库安装

    2. 在终端打开 python 运行环境,执行指令:pip install beautifulsoup4

 

[C] Beautiful Soup库的而基本使用

import requests

# 1. 获取网站的html代码,存储在demo中
url = 'http://python123.io/ws/demo.html'
r = requests.get(url)
demo = r.text
print(type(demo))       # 返回<class 'str'>

# 2. 利用bs库处理html代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, 'html.parser')
print(type(soup))       # 返回<class 'bs4.BeautifulSoup'>
print(soup.prettify())    # 返回排列好的html代码(未被丑化的)
View Code

 

[D] Beautiful Soup库的基本元素

    1. Beautiful Soup库是解析,遍历,维护 "标签树" 的功能库,只要提供的是标签树,该库都能对其进行解析

    2. 首先,html代码 或者 标签树 被转化成BeautifulSoup类,然后就可以进行操作了

 

   Beautiful Soup 库解析器有四种:

解析器 使用方法 使用条件
bs4的HTML解析器 BeautifulSoup(mk, 'html.parser') 安装bs4库
lxml的HTML解析器 BeautifulSoup(mk, 'lxml') pip install lxml
lxml的的XML解析器 BeautifulSoup(mk, 'xml') pip install lxml
html6lib的解析器 BeautifulSoup(mk, 'html5lib') pip install html5lib

 

   Beautiful Soup类的基本元素:

基本元素 说明
Tag 标签,最基本的信息组织单元,分别用<>和</>表明开头和结尾
Name 标签的名字,<p>...</p>的名字为'P', 格式为:<tag>.name
Attributes 标签的属性,字典形式组织,格式: <tag>.attrs
NavigableString 标签内非属性字符串,<>...</>之间的字符串,格式为:<tag>.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型
text 返回字符串,内容为所解析的标签内的文本

   

  BeautifulSoup类包含了所解析的html页面的所有信息,可以通过调用相应属性来获取指定内容

import requests
from bs4 import BeautifulSoup

# 1. 首先通过requests库爬取html代码
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text

# 2. 煲汤
soup = BeautifulSoup(demo, 'html.parser')

      1. BeautifulSoup类.标签名    通过标签名获取指定标签的内容,若有多个同类标签免责返回第一个

          如:soup.p  获取p标签的完整信息

            // 返回 <p class="title"><b>The demo python introduces several python courses.</b></p>

      2. BeautifulSoup类.标签名.name  获取指定标签的名字

          如:soup.p.name  获取p标签的名称

            // 返回 p

      3. BeautifulSoup类.标签名.attrs  获取指定标签的属性(即行内属性)

          如:soup.a.attrs  获取a标签的属性对象

            // 返回 {'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}

      4. BeautifulSoup类.标签名.string  获取指定标签内的内容字符串

          如:soup.p.string  获取指定标签内的文本内容(可穿透嵌套的标签

      5. BeautifulSoup类.标签名.string  获取指定标签内的注释部分

          如:soup.p.string    获取p标签终中的注释内容

        注意:4 和 5 方法一样但是获取的内容一个是内容信息,一个是注释信息,需要用type()方法来判断具体是哪一类信息

      6. BeautifulSoup类.text  或  BeautifulSoup类.p.text

          如:soup.text,soup.p.text  获取所解析内容的标签内的文本,或者指定标签内的文本,返回值为字符串

 

 

 

 

  

 [E] 基于bs 库的 HTML内容遍历方法

    1. HTML标签树,可以看作一个树结构

    2. 标签树的遍历分为三种方式:下行遍历,上行遍历和平行遍历

    3. 三种遍历方式图解如图:

    

    标签树的下行遍历:

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

 

 

     标签树的上行遍历:

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

 

 

          标签的上行遍历代码示例:

 

import requests
from bs4 import BeautifulSoup

# 1. 首先通过requests库爬取html代码
r = requests.get('http://python123.io/ws/demo.html')
demo = r.text

# 2. 煲汤
soup = BeautifulSoup(demo, 'html.parser')
for parent in soup.a.parents:
    if parent is None:
        print(parent)
    else:
        print(parent.name)

 

    

    标签树的平行遍历:

属性 说明
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 返回按照HTML文本顺序的上一个平行节点标签
.next_siblings 迭代类型,返回按照HTML文本顺序的后续所有平行节点标签
.previous_siblings 迭代类型,返回按照HTML文本顺序的前续所有平行节点标签

 

 

 [F] 基于bs4库的HTML格式输出和编码

   1. 如何让HTML页面更友好的显示

      prettify()方法,为HTML标签添加换行符,使得代码打印时的结构更加清晰

   2. bs4库将读入的任何HTML代码和字符串,都进行utf-8编码

 

 

 

 

posted @ 2020-11-16 22:27  CarreyB  阅读(153)  评论(0编辑  收藏  举报