【21天python打卡】第14天 网络python(5)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: ​​​大家好,今天是21天python打卡的第14天,上一篇讲了python中requests-html的用法,今天来说说的Beautiful Soup用法。

Beautiful Soup模块是什么

初学 Python ,十之八九你采集的目标是网页,因此快速定位到网页内容,就成为你面临的第一道障碍,

本篇博客就为你详细说明最易上手的网页元素定位术,学完就会系列。


本文核心使用到的是 Beautiful Soup 模块,因此我们用来做测试采集的站点,也是其官网(现阶段采集越来越严格,很多站点不能在采集了,很容易被封杀,只能学谁就采集谁了)


官方站点


www.crummy.com/software/BeautifulSoup/

Beautiful Soup 在 Python 圈知名度极高,而且非常好用,它是一款 Python 解析库,主要用于将 HTML 标签转换为 Python 对象树,然后让我们从对象树中提取数据。

模块的安装及其简单:

pip install bs4 -i 国内任意源即可

未来安装任何模块,都尽量使用国内源,速度快稳定。

该模块包名称为 bs4,安装的时候需要特别注意下。


基础用法如下所示

import requests
from bs4 import BeautifulSoup
def ret_html():
    """获取HTML元素"""
    res = requests.get('https://www.crummy.com/software/BeautifulSoup/', timeout=3)
    return res.text
if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(soup)

其中需要注意的就是模块导入代码,以及实例化 soup 对象时,在 BeautifulSoup 类的构造函数中传递的两个参数,一个是待解析的字符串,另一个是解析器,官方建议的是 lxml,因其解析速度快。

上述代码输出的内容如下所示,看上去就是普通的 HTML 代码文件。

Site Search:
<form action="/search/“method="get">
<input maxlength="255"name="q"type="text"value=""/>
</form>
</td>
</tr>
</table>
</body>
</html>

而且我们可以调用 soup 对象的 soup.prettify() 方法,可以将 HTML 标签进行格式化操作,这样你就可以在存储到外部文件的时候,让其 HTML 代码进行美观。


BeautifulSoup 模块的对象说明

BeautifulSoup 类可以将 HTML 文本解析成 Python 对象树,而这里面又包括最重要的四种对象,分别是 TagNavigableStringBeautifulSoupComment 对象,接下来我们一一介绍。


BeautifulSoup 对象

该对象本身就代表整个 HTML 页面,而且实例化该对象的时候,还会自动补齐 HTML 代码。

    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(type(soup))

Tag 对象

Tag 是标签的意思,Tag 对象就是网页标签,或者叫做网页元素对象,例如获取 bs4 官网的 h1 标签对象,代码如下所示:

if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    # print(soup.prettify())  # 格式化 HTML
    print(soup.h1)

得到的也是网页中的 h1 标签:

<h1>Beautiful Soup</h1>

用 Python 中的 type 函数,可以查看其类型,代码如下:

    print(soup.h1)
    print(type(soup.h1))

此时得到的可不是一个字符串,而是一个 Tag 对象。

1. <h1>Beautiful Soup</h1>
2. <class 'bs4.element.Tag'>

既然是 Tag 对象,那就会具备一些特定的属性值

获取标签名称

    print(soup.h1)
    print(type(soup.h1))
    print(soup.h1.name)  # 获取标签名称

通过 Tag 对象获取标签的属性值

1. print(soup.img)  # 获取网页第一个 img 标签
2. print(soup.img['src'])  # 获取网页元素DOM的属性值


通过 attrs 属性获取标签的所有属性

    print(soup.img)  # 获取网页第一个 img 标签
    print(soup.img.attrs)  # 获取网页元素的所有属性值,以字典形式返回

以上代码的所有输出如下所示,可以任意选择标签进行练习。

<h1>Beautiful Soup</h1>
<class 'bs4.element.Tag'>
h1
<img align="right" src="10.1.jpg" width="250"/>
{'align': 'right', 'src': '10.1.jpg', 'width': '250'}

NavigableString 对象

NavigableString 对象获取的是标签内部的文字内容,例如 p 标签,在下述代码中提取的是csdn

<p>csdn</p>

获取该对象也非常容易,使用 Tag 对象的 string 属性即可。

1.     nav_obj = soup.h1.string
2. print(type(nav_obj))


输出结果如下所示

<class 'bs4.element.NavigableString'>

如果目标标签是一个单标签,会获取到 None 数据

除了使用对象的 string 方法外,还可以使用 text 属性和 get_text() 方法来获取标签内容

    print(soup.h1.text)
    print(soup.p.get_text())
    print(soup.p.get_text('&'))

其中 text 是获取所有子标签内容的合并字符串,而 get_text() 也是相同的效果,不过使用 get_text() 可以增加一个分隔符,例如上述代码的 & 符号,还可以使用,strip=True 参数去除空格。


Comment 对象

获取网页注释内容,用处不大,忽略即可。

BeautifulSoup 对象和 Tag 对象支持标签查找方法,具体内容如下所示。


find() 方法和 find_all() 方法

调用 BeautifulSoup 对象和 Tag 对象的 find() 方法,可以在网页中找到指定对象,该方法的语法格式如下:

obj.find(name,attrs,recursive,text,**kws)


方法的返回结果是查找到的第一个元素,如果没查询到,返回 None。

参数说明如下:

  • name:标签名称;
  • attrs:标签属性;
  • recursive:默认搜索所有后代元素;
  • text:标签内容。


例如我们继续在上文请求的网页中,查找 a 标签,代码如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
print(soup.find('a'))

也可以使用 attrs 参数进行查找,代码如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
# print(soup.find('a'))
print(soup.find(attrs={'class': 'cta'}))

find() 方法还提供了一些特殊的参数,便于直接查找,例如可以使用 id=xxx,查找属性中包含 id 的标签,可以使用 class_=xxx,查找属性中包含 class 的标签。

print(soup.find(class_='cta'))


find() 方法成对出现的是 find_all() 方法,看名称就能知道其返回结果收是全部匹配标签,语法格式如下:其中重点说明一下 limit 参数,它表示最多返回的匹配数量,find() 方法可以看作 limit=1,这样就变得容易理解了。

今天就介绍到这里,下一篇我们通过具体实例来讲解python的应用。

相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
111 55
|
1月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
1月前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
74 2
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
15天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
93 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
20天前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
35 6
|
23天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
48 8
|
22天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
78 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络