1. 学习视频地址
https://www.bilibili.com/video/BV1pt41137qK?p=22
2. Beautiful Soup 类的基本元素
BeautifulSoup 库:也叫BeautifulSoup4或bs4,是解析、遍历、维护,标签树的功能库
基本元素 | 说明 |
---|---|
Tag | 标签,最基本的信息组织单位,分别用<>和</>标明开头和结尾 |
Name | 标签的名字, … 的名字是 p,格式:.name |
Attributes | 标签的属性,字典形式组成,格式:.attrs |
NavigableString | 标签内非属性字符串, <>…</>中字符串,格式:.string |
Comment | 标签内字符串的注释部分,一种特殊的comment类型 |
2.1 代码
如下demo 演示 .name、.attrs 和 .string 的用法
import requests
# BeautifulSoup 库:也叫BeautifulSoup4或bs4,是解析、遍历、维护,标签树的功能库
# 我们从bs4库中引入了一个叫BeautifulSoup的类型
from bs4 import BeautifulSoup
"""
Beautiful Soup 类的基本元素
基本元素 说明
Tag 标签,最基本的信息组织单位,分别用<>和</>标明开头和结尾
Name 标签的名字,<p>..</p>的名字是 p,格式:<tag>.name
Attributes 标签的属性,字典形式组成,格式:<tag>.attrs
NavigableString 标签内非属性字符串, <>...</>中字符串,格式:<tag>.string
Comment 标签内字符串的注释部分,一种特殊的comment类型
"""
if __name__ == '__main__':
# html.parser 为解析器,专门解析 html
soup = BeautifulSoup('<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>', 'html.parser')
print('标签的名字:', soup.name)
print('标签的属性:', soup.attrs)
print('标签内非属性字符串:', soup.string)
print('-----------------')
print('a 标签的名字:',soup.a.name)
print('a 标签的属性:',soup.a.attrs)
print('a 标签内非属性字符串:', soup.a.string)
print('-----------------')
print('a 标签的属性中的字典-class的对应值:', soup.a.attrs['class'])
print('a 标签的属性中的字典-href的对应值::', soup.a.attrs['href'])
print('a 标签的属性中的字典-id的对应值::', soup.a.attrs['id'])
2.2 运行结果
C:\Users\珞落\AppData\Local\Programs\Python\Python39\python.exe D:/PythonProject/main.py
标签的名字: [document]
标签的属性: {}
标签内非属性字符串: Basic Python
-----------------
a 标签的名字: a
a 标签的属性: {'class': ['py1'], 'href': 'http://www.icourse163.org/course/BIT-268001', 'id': 'link1'}
a 标签内非属性字符串: Basic Python
-----------------
a 标签的属性中的字典-class的对应值: ['py1']
a 标签的属性中的字典-href的对应值:: http://www.icourse163.org/course/BIT-268001
a 标签的属性中的字典-id的对应值:: link1
Process finished with exit code 0
3. 代码
import requests
# BeautifulSoup 库:也叫BeautifulSoup4或bs4,是解析、遍历、维护,标签树的功能库
# 我们从bs4库中引入了一个叫BeautifulSoup的类型
from bs4 import BeautifulSoup
"""
Beautiful Soup 类的基本元素
基本元素 说明
Tag 标签,最基本的信息组织单位,分别用<>和</>标明开头和结尾
Name 标签的名字,<p>..</p>的名字是 p,格式:<tag>,name
Attributes 标签的属性,字典形式组成,格式:<tag>.attrs
NavigableString 标签内非属性字符串, <>...</>中字符串,格式:<tag>.string
Comment 标签内字符串的注释部分,一种特殊的comment类型
例如 P 标签:<p class="title>xxx</p>",标签对TAG:<p>..</p>
"""
if __name__ == '__main__':
# html.parser 为解析器,专门解析 html
r = requests.get("https://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo, 'html.parser')
# 漂亮显示
print(soup.prettify())
print('------------------------------------')
# 打印标签为head的信息 <head><title>This is a python demo page</title></head>
print(soup.head)
# 打印标签为title的信息 <title>This is a python demo page</title>
print(soup.title)
# 打印标签为a的信息 <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
# 这里有个问题,该网页有2个a标签,这里会返回第一个a标签,不会返回第二个a标签,那么怎么解决呢?
print(soup.a)
# 从观察中我们发现,2个a的父标签不一样
tag = soup.a
# 打印结果:<class 'bs4.element.Tag'>
print(type(tag))
# 打印结果:<class 'dict'>
print(type(tag.attrs))
# 打印出一个字典(键值对){'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
print(tag.attrs)
# 获取字典中的class的键值,['py1']
print(tag.attrs['class'])
4. 运行结果
C:\Users\珞落\AppData\Local\Programs\Python\Python39\python.exe D:/PythonProject/main.py
<html>
<head>
<title>
This is a python demo page
</title>
</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 class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">
Basic Python
</a>
and
<a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">
Advanced Python
</a>
.
</p>
</body>
</html>
------------------------------------
<head><title>This is a python demo page</title></head>
<title>This is a python demo page</title>
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a>
<class 'bs4.element.Tag'>
<class 'dict'>
{'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
['py1']
Process finished with exit code 0