Python网络爬虫与信息提取(三):使用BeautifulSoup信息提取

Python网络爬虫与信息提取

  • 1.BeautifulSoup的官网与安装
    • 通过pip安装
  • 2.小案例:BeautifulSoup库安装小测
  • 3.BeautifulSoup库的基本元素
    • Beautiful Soup库的引用
    • BeautifulSoup类
    • BeautifulSoup库解析器
    • BeautifulSoup类的基本元素
    • BeautifulSoup库的理解
  • 4.基于bs4库的HTML内容遍历方法
    • 标签树的下行遍历
    • 标签树的上行遍历
    • 标签树的平行遍历
  • 5.基于bs4库的HTML格式输出

1.BeautifulSoup的官网与安装

官方网站

通过pip安装

pip install beautifulsoup4

2.小案例:BeautifulSoup库安装小测

import requests
from bs4 import BeautifulSoup

url = 'https://python123.io/ws/demo.html'
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
print(soup.prettify())

3.BeautifulSoup库的基本元素

BeautifulSoup库是解析、遍历、维护“标签树”的功能库。
HTML代码=标签树 = BeautifulSoup类

Beautiful Soup库的引用

Beautiful Soup库,也叫beautifulsoup4或bs4。

from bs4 import BeautifulSoup #从bs4库中引入一个BeautifulSoup类型

或者

import bs4

BeautifulSoup类

HTML代码 = 标签树 = BeautifulSoup类
Python网络爬虫与信息提取(三):使用BeautifulSoup信息提取_第1张图片

from bs4 import BeautifulSoup

soup = BeautifulSoup('data', 'html.parser')
soup2 = BeautifulSoup('D://demo.html', 'html.parser')

BeautifulSoup对应一个 HTML / XML 文档全部内容。

BeautifulSoup库解析器

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

BeautifulSoup类的基本元素

基本元素 说明
Tag 标签,最基本的信息组织单元,分别用<>和标明开头和结尾
Name 标签的名字,

的名字是‘p’,格式:.name
Attributes 标签的属性,字典形式组织,格式:.attrs
NavigableString 标签内非属性字符串,<>…中字符串,格式:.string,能构成节点
Comment 标签内字符串的注释部分,一种特殊的Comment类型

BeautifulSoup库的理解

Python网络爬虫与信息提取(三):使用BeautifulSoup信息提取_第2张图片

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

案例HTML页面:

<html>
    <head>
        <title>This is a python demo pagetitle>
    head>
    <body>
        <p class="title">
            <b>The demo python introduces several python courses.b>
        p>
        <p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to
    professional by tracking the following courses:
            <a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Pythona> and 
            <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Pythona>.
        p>
body>
html>

HTML标签结构

标签树的下行遍历

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

遍历儿子节点

for child in soup.body.children:
    print(child)

遍历子孙节点

for child in soup.body.descendants:
    print(child)

标签树的上行遍历

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

遍历a标签的所有先辈标签

import requests
from bs4 import BeautifulSoup

url = 'https://python123.io/ws/demo.html'
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
for parent in soup.a.parents:
    print(parent.name)

结果:

p
body
html
[document]

标签树的平行遍历

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

要求:平行遍历发生在同一个父节点下的各节点间

遍历后续节点

for sibling in soup.a.next_siblings:
    print(sibling)

遍历前续节点

for sibling in soup.a.previous_siblings:
    print(sibling)

5.基于bs4库的HTML格式输出

soup.prettify()

from bs4 import BeautifulSoup

soup = BeautifulSoup("

中文

"
, "html.parser") print(soup.p) print(soup.p.prettify())

输出:

中文

中文

你可能感兴趣的:(Python网络爬虫与信息提取(三):使用BeautifulSoup信息提取)