Beautiful Soup (一) 一、Beautiful Soup库的理解 二、Beautiful Soup类的基本元素 三、获取标签的方法 四、使用

 

1、Beautiful Soup库可以说是对HTML进行解析、遍历、维护“标签树”的功能库

2、pip install bs4

3from bs4 import BeautifulSoup       #beautifulsoup4库使用时是简写的bs4

二、Beautiful Soup类的基本元素

1Tag——标签,最基本的信息组织单元,分别用<></>表明开头和结尾

2Name——标签的名字,<p>...</p>的名字是'p',格式:<tag>.name

3Attributes——标签的属性,字典形式组织,格式:<tag>.attrs

4NavigableString——标签内非属性字符串,<>...</>中的字符串,格式:<tag>.string

5Comment——标签内字符串的注释部分,一种特殊的Comment类型(尖括号叹号表示注释开始:<!--This is a commet-->

三、获取标签的方法

1soup = BeautifulSoup(demo,'html.parser')

2soup.li.name          #a标签的名字

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

3soup.li.parent.name     #a标签的父标签的名字

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

4soup.li.parent.parent.name       #a标签的父标签的父标签名字

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

5t = soup.li      #获得第一个a标签

6t.attrs         #a标签的属性

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

7、soup.li.string      #获得a标签内非属性字符串(NavigableString )注意:

soup = BeautifulSoup(data,'lxml')

t = soup.li.string

print(type(t),t)

t = soup.ol.li.string

print(type(t),t)

8、soup.ol.string #也可能是获得Comment标签;可通过类型进行判断

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

四、使用

数据文件:

data = '''<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>soup测试</title>
    <title class="warm">你那温情的一笑,搞得我瑟瑟发抖</title>
</head>
<body>
<div class="tang">
    <ul>
        <li class="hello" ></html>'''

 

 

1、第一类对象:BeautifulSoup

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

2、第二类标签 Tag,只会返回第一个标签里的所有内容

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

3、第三类数据类型NavigableString

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

4、第四种,Comment,注释

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

5、遍历(获取子节点)

1soup = BeautifulSoup(data,'lxml')

t = soup.ul.children

print(t)

for i in t:

    print(i)

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

2)print(soup.div.contents)# 返回一个列表

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用

 

3)print(soup.div.descendants)# 返回的是一个迭代器

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用

 

4print(soup.div.parents)#获取所有的祖先节点

.parent属性是获取父节点,返回来的是整个父节点,里面包含该子节点。.parents就是获取所有的祖先节点,返回的是一个生成器

注:>生成器是只能遍历一次的。

>生成器是一类特殊的迭代器。

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

6、bs库的更高级的用法(获取任意一个指定属性的标签)

soup.find_all( name , attrs , recursive , text , **kwargs )

name:需要获取的标签名

attrs:接收一个字典,为属性的键值,或者直接用关键字参数来替代也可以,下面

recursive:设置是否搜索直接子节点

text:对应的字符串内容

limit:设置搜索的数量

1)先使用name参数来进行搜索(print(soup.find_all('li'))

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

 

2) 使用nameattrs参数(print(soup.find_all('div', {'class':'more-meta'}))

注:这个对上个进行了筛选,属性参数填的是一个字典类型的

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

3)根据关键字参数来搜索

print(soup.find_all(class_='cao'))

注:因为class是python关键字,所以关键字参数时需要加多一个下划线来进行区别

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

4) find()方法

此方法与find_all()方法一样,只不过这个方法只是查找一个标签而已,后者是查找所有符合条件的标签。

5) select()方法

这个方法是使用css选择器来进行筛选标签的。

css选择器:就是根据标签的名字,id和class属性来选择标签。

通过标签名:直接写该标签名,如li a,这个就是找li标签下的a标签

通过class属性:用. 符号加class属性值,如.title .time这个就是找class值为title下的class值为time的标签

通过id属性:用# 加id属性值来进行查找,如#img #width这个就是找id值为img下的id值为width的标签

上面三者可以混合使用,如ul .title #width

 

 

6).get_text()方法和前面的.string属性有点不一样哈,这里的他会获取该标签的所有文本内容,不管有没有子标签

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

注:.string会把注释也打印出来,若标签没有内容,只有子标签有,就返回None

.get_text()不打印注释,会把标签本身和子标签内容都打印出来;

 

7)还可以用标签选择器来进行筛选元素, 返回的都是一个列表

print(soup.select('div ul li'))# 这个是根据标签名进行筛选

print(soup.select('.tang .taohua'))# 这个是根据class来进行筛选

print(soup.select('#wo #gu '))# 这个是根据id来进行筛选

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

8)等价标签

t = soup('li')

print(type(t),t)

t = soup.find_all("li")

print(type(t),t)

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

t = soup.ul.find_all(text=True)

print(type(t),t)

 

t = soup.ul(text=True)

print(type(t),t)

 

soup.find_all("ul",limit=1)

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用

 

9)soup.ul.find_all

soup.ul.find_all(text=True) #只有内容的列表

soup.ul.find_all() #带有li标签的列表

soup.find_all("ul", limit=1) #带有ul li list标签的列表,limit限制返回的数量

 

Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用 

 

 

 

欢迎关注小婷儿的博客:

csdnhttps://blog.csdn.net/u010986753

博客园:http://www.cnblogs.com/xxtalhr/

 

有问题请在博客下留言或加QQ群:483766429 或联系作者本人 QQ 87605025

 

OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培训说明连接:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

 

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。

重要的事说三遍。。。。。。

 

 

    Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用    Beautiful Soup (一)
一、Beautiful Soup库的理解
二、Beautiful Soup类的基本元素
三、获取标签的方法
四、使用