7.BeautifulSoup(1)

发布日期:2020-12-26 作者:admin 来源:网络

        BeautifulSoup在Python中是一个比较受欢迎的第三方库,它是一款比较优秀的网页解析库,里面提供了很多接口帮助我们来处理导航、搜索、修改分析树,它的查找提取功能非常好用,能够节省程序员大量的时间。

        BeautifulSoup最新版为BeautifulSoup4,我们可以通过pip来安装,也可以在Pycharm中直接找到进行下载。

图片1.png 

        Pip安装过程如图:

 图片2.png

    1. BeautifulSoup的使用

        我们先通过一段代码来测试使用一下它的用法:

Dot = """
<html><head><title>dotcpp</title></head>
<body>
<p><b>c语言网</b></p>
<p>编程网站
<a href="https://www.dotcpp.com/" id="link1">home</a>,
<a href="https://blog.dotcpp.com/" id="link2">blog</a>
<a href="https://www.dotcpp.com/oj/problemset.html" id="link3">oj</a></p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(dot, "html.parser")
print(soup.prettify())

        输出结果为:

 图片3.png

        我们可以通过这种方式来解析网页,我们还可以通过它来进一步获取更精确的信息,例如:

soup = BeautifulSoup(html,"html.parser") 
print(suop.prettify())
print(suop.title)  # 获取title标签的所有内容
print(suop.title.name) # 获取title标签的名字
print(suop.title.string) # 获取title标签的文本内容
print(suop.head) # 获取head标签的所有内容
print(suop.div)# 获取第一个div标签中的所有内容
print(suop.div["id"]) # 获取第一个div标签的id的值
print(suop.a)  # 获取第一个a标签中的所有内容
print(suop.find_all("a")) # 获取所有的a标签,并遍历打印a标签中的href的值
print(suop.find(id = "dot")) # 获取id="dot"

        输出结果即为对应的信息,注意解析html网页的解析方式,我们一直采用了Python中自带的html.parser,我们还可以选择lxml HTML、lxml XML和html5lib等解析器,他们分别有着优劣点,如果系统中有C语言库的可以选择下载前两者解析器,如果不想再下载过多插件的也可以直接选择我们上面用到的即可,我们在使用BeautifulSoup的时候一定要注意的就是网页解析,正确的解析方式十分重要。

    2. BeautifulSoup4的四个对象

        Beautiful Suop把网页中的信息转换成一个复杂的树形结构,通过子树分解为四个对象,分别是Tag、NavigableSting、BeautifulSoup、Comment。

        1) Tag

        Tag与它的对应的汉语一个意思,对应的就是HTML中的标签,像我们在上面使用到的:

print(suop.title) # 获取title标签的名称
print(suop.a) # 获取所有的a标签中的所有内容

        他们都属于标签信息,我们可以通过标签名来获取到这些标签中的内容,有一点需要注意的是在查找的时候,对应的是符合要求的第一个标签,Tag有两个属性,分别是name和attrs,name也就是标签的名字,attrs对应class、id等信息。

        2) NavigableSting

        NavigableSting对应的是标签内部的文字,例如:

print(suop.title.string) # 获取标签的所有内容

        通过这种方式就可以直接获取到标签内部的文字。

        3) BeautifulSoup

        BeautifulSoup对象对应的是文档中的内容,它类似于一个特殊的标签,我们可以获取到它的类型、名称和属性,也就是上面我们所使用到的:

soup = BeautifulSoup(html,"html.parser")

        4) Comment

        Comment对象是一个特殊的NavigableSting对象,它输出的内容没有注释符号,如果不加以处理会影响我们对文档的解析,因为这种方式会忽略掉文档的注释,

        因此注释中的内容会以代码格式被解析出来,进而影响我们的后续操作,所有我们 一般会采用.string来输出内容。


关键词 :
帝国模板网版权所有