不懂先生

BeautifulSoup使用方法
1.什么是BeautifulSoup  Beautiful Soup 是一个可以从HTML或X...
扫描右侧二维码阅读全文
12
2021/08

BeautifulSoup使用方法

1.什么是BeautifulSoup

  Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间.

2.使用方法

1.对象的种类和使用

# -*-coding:utf-8 -*-
# 作者:不懂先生
# 日期: 2021/8/3
# BeautifulSoup4 将复杂HTML文档转换成一个复杂的树形结构,每个节点都是python对象,所有对象可以归结为4种
#-Tag
#-NavigableString
#-BeautifulSoup
#-Comment
import re

from bs4 import BeautifulSoup
file = open("./index.html","rb")  #当前文件夹是 ./  rb 以二进制读取
html = file.read().decode("utf-8")
bs = BeautifulSoup(html,"html.parser")# 第一个是解析文件的类型  第二个是用什么解析器   解析html 树形结构


# 1.Tag 标签及其内容:拿到它的第一个内容
print(bs.title)
print(bs.a)#只输出第一个找到的
print(bs.head) #输出head标签里面的内容
print(type(bs.head))

#2.NavigableString 标签里面的内容(字符串)
print(bs.title)#标签一级里面内容都打印
print(bs.title.string)#只要里面的内容

# name 属性 拿到标签(tag)的名字
print(bs.title.name)#输出title 
# attrs 拿到标签里面所有的属性和属性值 以字典保存
print(bs.a.attrs)

#3.BeautifulSoup  表示整个文档  整个html文档内容
print(type(bs))#类型<class 'bs4.BeautifulSoup'>
print(bs.name)#名字叫做document
print(bs.attrs)
print(bs)

# 4.Comment 是一个特殊的NavigableString 注   释  输出的时候自己识别注释,并去掉注释符号 输出注释的内容
print(bs.a.string)
print(type(bs.a.string))#<class 'bs4.element.Comment'>



文档的遍历 contents:获取Tag的所有子节点  返回一个list

tar的.content属性可以将tag的子节点以列表的方式输出
print(bs.head.contents)
用列表索引来获取他的某一个元素
print(bs.head.contents[0])
print(bs.head.contents[1])

# children:获取Tag的所有子节点,返回一个生成器
for child in bs.body.children:
    print(child)



# 文档的搜索
# (1)find_all()  存放到数组里面 称为元素
字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all("a") #存放到列表里面  一个a是一个列表元素
print(t_list)

# (2)正则表达式搜索:search()方法来匹配内容
import re
t_list = bs.find_all(re.compile("a"))#包含a的标签会整个显示出来 如head 整个标签是一个列表元素
print(t_list)

# 方法:传入一个函数(方法),根据函数的要求来搜索
def name_is_exists(tag):  #tag 标签 看是否有name这个属性
    return tag.has_attr("name")#有name属性的以列表元素形式输出

t_list = bs.find_all(name_is_exists)#标签里面含有name的找出来
for item in t_list:
    print(item) #遍历输出

# 2.kwargs 参数  指定参数搜索

t_list = bs.find_all(id="u1")# 找出id="u1"的所有标签  并输出里面所有内容
print(t_list)

t_list = bs.find_all(class_= True)#存在class这个属性则输出
print(t_list)

t_list = bs.find_all(href="http://www.bossdong.cn/zhaopian")
print(t_list)


# 3.text 文本参数  标签输出的内容
t_list = bs.find_all(text="相册")
t_list = bs.find_all(text=["相册","博客","吉他谱","nnini"])#有则输出 没有不输出
t_list = bs.find_all(text=re.compile("/d"))#应用正则表达式来寻找包含特定文本的内容(标签里面的字符串)
for i in t_list:
    print(i)

# 4.limit 参数
t_list = bs.find_all("a",limit=2)#只要前两个
for i in t_list:
    print(i)

# 5.css选择器
t_list = bs.select("title")  #通过标签来寻找 列表形式存储

t_list = bs.select(".item-logo")  #通过类名来寻找

t_list = bs.select("#u1")  通过ID来寻找

t_list = bs.select("a[class="bossdong-color-item"]")  #先选择a标签 并且里面还有含有bossdong-color-item这个属性,通过属性来寻找

t_list = bs.select("head > title")  #通过子标签来寻找

t_list = bs.select(".fa-music ~ .light") #通过兄弟类名来寻找
print(t_list[0].get_text())  #get_text()得到文本内容
Last modification:January 18th, 2022 at 04:28 pm

Leave a Comment