安装

pip install BeautifulSoup

安装小试

>>> import requests
>>> r = requests.get("https://www.python123.io/ws/demo.html")
>>> demo = r.text

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo, "html.parser")
>>> print(soup.prettify())

BeautifulSoup库的基本元素

###BeautifulSoup库的理解

html文件结构:由一组尖括号构成的标签组织起来,形成的标签树的形式。

<html>
    <body>
        <b><!--This is a comment--></b><p calss="title">...</p>
  </body>
</html>

爬虫之BeautifulSoup库入门笔记

BeautifulSoup库是解析、遍历、维护“标签树”的功能库。

BeautifulSoup库的引用

from bs4 import BeautifulSoup

##BeautifulSoup库解析器

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

BeautifulSoup类的基本元素

基本元素 说明
Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾
Name 标签的名字,<p>…</p>的名字是’p’,格式:<tag>.name
Attributes 标签的属性,字典形式组织,格式:<tag>.attrs
NavigableString 标签内非属性字符串,<p>…</p>中字符串,格式:<tag>.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo, "html.parser")
>>> print(soup.prettify())
#获取a标签的名字
>>> soup.a.name
'a'
>>> soup.a.parent.name
'p'
>>> soup.a.parent.parent.name
'body'
#获得a标签的属性,是一个字典类型
>>> tag = soup.a
>>> tag.attrs
{'href': 'http://www.icourse163.org/course/BIT-268001', 'class': ['py1'], 'id': 'link1'}
#获得class属性的值
>>> tag.attrs['class']
['py1']
#查看标签的类型
>>> type(tag)
<class 'bs4.element.Tag'>

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

标签树的下行遍历

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

标签树的上行遍历

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

标签树的平行遍历

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

基于bs4库的HTML的格式输出

prettify()方法

“友好”的输出HTML文本

>>> print(soup.prettify())

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

.find_all(name, attrs, recuesive, string, **kwargs)

返回一个列表类型,储存查找结果

name:对标签名称的检索字符串

soup.find_all('a')

attrs:对标签属性值得检索字符串,可标注属性检索

soup.find_all('p', "course")

soup.find_all(id="link1")

recuesive:是否对子孙全部搜索,默认为True

string:<>…</>中字符串区域的检索字符串

相关文章: