Python爬虫基础——BeaytifulSoup模块

        BeaytifulSoup模块是一个HTML/XML解析器,主要用于解析和提取HTML和XML文档中的数据。该模块不仅支持Python标准库中的HTML解析器, 而且支持许多功能强大的第三方解析器。这里推荐使用lxml解析器,该解析器能将网页中的源代码加载为BeaytifulSoup对象,在使用对象的 方法提取数据。个人感觉这个方式比正则表示好理解,当然熟能生巧,自己选择解析数据方式。

1、实例化BeaytifulSoup对象

1.1 从本地文件存储的HTML文档进行实例化为BeaytifulSoup对象

1.2 将获取到的网页源代码字符串实例化为BeaytifulSoup对象

2、用BeautifulSoup对象定位标签

2.1 通过标签名定位 网页源码中可能存在多个同名的标签,通过标签名只能定位返回第一个标签.

2.2 通过标签属性进行定位

2.3 通过标签签名和标签属性进行定位

2.4 通过选择器进行定位

2.4.1 id选择器         id选择器可以更具标签页的id属性进行定位。
2.4.2 class选择器          根据class属性进行定位的
2.4.3 标签选择器 标签选择器与标签名选择器定位的区别在于标签选择器可以返回所有该类型的标签。
2.4.4 层级选择器

3、从标签中提取文本内容和属性值

3.1 从标签中提取文本内容

3.2 从标签中提取属性

##############################
##作者:白雪公主的后妈
##时间:2024年1月6日
##主题:Python爬虫基础——BeaytifulSoup模块
##主要内容:模拟浏览器发起HTTP或HTTPS的网络请求,从而获取网页源代码
##############################'''
BeaytifulSoup模块是一个HTML/XML解析器,主要用于解析和提取HTML和XML文档中的数据。该模块不仅支持Python标准库中的HTML解析器,而且支持许多功能强大的第三方解析器。这里推荐使用lxml解析器,该解析器能将网页中的源代码加载为BeaytifulSoup对象,在使用对象的方法提取数据。
'''
#1、实例化BeaytifulSoup对象
#1.1    从本地文件存储的HTML文档进行实例化为BeaytifulSoup对象from bs4 import BeautifulSoup
fp=open('text1.html',encoding='utf-8')   #读取本地的HTML文档,text.html为本地地址
soup=BeautifulSoup(fp,'lxml')   #用读取的HTML文档实例化一个BeaytifulSoup对象,第二个参数“lxml”表示指定解析器为lxml
# print(soup)
#1.2    将获取到的网页源代码字符串实例化为BeaytifulSoup对象
# from bs4 import BeautifulSoup
# import requests
# #身份码伪装
# header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36 Edg/131.0.0.0"}        #浏览器身份验证
# #请求的地址
# url = "https://www.baidu.com"
# #发起请求,并获得网页源代码
# response = requests.get(url,headers=header).text
# #采用lxml对源码进行解析,实例化网页源码为BeautifulSoup对象
# soup = BeautifulSoup(response,'lxml')
# print(soup)#2、用BeautifulSoup对象定位标签
#2、1通过标签名定位     网页源码中可能存在多个同名的标签,通过标签名只能定位返回第一个标签
# print(soup.a)       #只返回第一个标签
'''
输出结果:
<a class="index-banner square-banner-bgicon" data-tclog="{ct: 10, cst: 2, logFrom: usertext}" data-thunder='cst:2;tid:97;logFrom:user;logInfo:text;logExtra:{"login":0};ref:index_iphone;url:https://m.baidu.com/s?word=%E7%AD%94%E9%A2%98%E7%BA%A2%E5%8C%85&amp;sa=searchpromo_dthb_wiseqipao;'><img src="https://search-operate.cdn.bcebos.com/ec326d1f467b6e1bca119e72956d1574.png"/><span class="index-banner-text"></span></a>
'''
#2、2通过标签属性进行定位
'''
标签属性有class、id等,事件中主要使用class属性来定位标签需要注意的是class这个单词为python的保留字,在用的过程中
使用class_来区分。其他标签如id属性,则没有添加下划线。
'''
# print(soup.find(class_='first'))          #返回class属性值为first的第一个标签
# print(soup.find_all(class_='first'))      #返回class属性值为first的所有标签
'''
运行结果:
<div class="first ten"></div>[<div class="first ten"></div>, <div class="first">第一个div<p>first div下的p标签</p>
<a class="first" href="https://www.baidu.com/" target="_self" title="百度一下">
<spam>a标签下的span标签</spam>first div下的第一个a标签</a>
<a class="two" href=""></a>
<img alt="" scr=""/>
</div>, <a class="first" href="https://www.baidu.com/" target="_self" title="百度一下">
<spam>a标签下的span标签</spam>first div下的第一个a标签</a>, <li class="first" id="first">第一个li标签</li>]
'''
#2、3通过标签名和标签属性进行定位
# print(soup.find('div',class_='first'))          #返回class属性值为first的第一个标签
# print(soup.find_all('div',class_='first'))      #返回class属性值为first的所有标签
'''
运行结果:
<div class="first ten"></div>
[<div class="first ten"></div>, <div class="first">第一个div<p>first div下的p标签</p>
<a class="first" href="https://www.baidu.com/" target="_self" title="百度一下">
<spam>a标签下的span标签</spam>first div下的第一个a标签</a>
<a class="two" href=""></a>
<img alt="" scr=""/>
</div>]
'''
#2、4通过选择器进行定位
'''
使用select()函数可以根据指定的选择器返回所有符合条件的标签。
常用的标签有id选择器,class选择器,标签选择器,层级选择器
'''
#2.4.1  id选择器   id选择器可以更具标签页的id属性进行定位。
# print(soup.select('#first'))
'''
运行结果:
select()函数括号中的'#first'是id选择器的书写格式,'#'表示id选择器,'#'后的捏偶然那个为id属性的值。
[<li class="first" id="first">第一个li标签</li>]
值得注意的是返回的是一个列表
在text1.html中又添加一行<li class="first" id="first">第一个li标签</li>
结果显示:[<li class="first" id="first">第一个li标签</li>, <li class="first" id="first">第一个li标签</li>]
'''
#2.4.2  class选择器    根据class属性进行定位的
# print(soup.select('.first'))
'''
运行结果:
select()函数括号中的'.first'class选择器的书写格式,'.'表示class选择器,'.'后的捏偶然那个为class属性的值。
根据运行结果显示,返回了class属性值为first的所有标签
[<div class="first ten"></div>, <div class="first">第一个div<p>first div下的p标签</p>
<a class="first" href="https://www.baidu.com/" target="_self" title="百度一下">
<spam>a标签下的span标签</spam>first div下的第一个a标签</a>
<a class="two" href=""></a>
<img alt="" scr=""/>
</div>, <a class="first" href="https://www.baidu.com/" target="_self" title="百度一下">
<spam>a标签下的span标签</spam>first div下的第一个a标签</a>, <li class="first" id="first">第一个li标签</li>, <li class="first" id="first">第一个li标签</li>]
'''
#2.4.3  标签选择器    标签选择器与标签名选择器定位的区别在于标签选择器可以返回所有该类型的标签。
# print(soup.select('li'))
'''
运行结果:
[<li class="first" id="first">第一个li标签</li>, <li class="first" id="first">第一个li标签</li>, <li class="two" id="two">第二个li标签</li>, <li class="three" id="three">第三个li标签</li>, <li class="four" id="four">第四个li标签</li>, <li class="five" id="five">第五个li标签</li>]
'''
#2.4.4  层级选择器
'''
一个标签可以包含另一个标签,这些标签位于不同的层级,形成层层嵌套的结构。
利用层级选择器可以先定位外层标签,然后定位每层标签,这样一层层往里定位,就能找到需要的标签。
'''
# print(soup.select('div>ul>#first'))     #选中所有<div>标签下的li标签中的id属性值为first的所有标签
# print('\n')
# print(soup.select('div>ul>li'))         #选中所有<div>标签下的li标签中的所有li标签
# print('\n')
# print(soup.select('div li'))            #选中<div>标签包含所有<li>标签
'''
运行结果:
[<li class="first" id="first">第一个li标签</li>][<li class="first" id="first">第一个li标签</li>, <li class="two" id="two">第二个li标签</li>, <li class="three" id="three">第三个li标签</li>, <li class="four" id="four">第四个li标签</li>, <li class="five" id="five">第五个li标签</li>][<li class="first" id="first">第一个li标签</li>, <li class="two" id="two">第二个li标签</li>, <li class="three" id="three">第三个li标签</li>, <li class="four" id="four">第四个li标签</li>, <li class="five" id="five">第五个li标签</li>]
'''
#3、从标签中提取文本内容和属性值
#3.1    从标签中提取文本内容
'''
定位到标签后,还需要从标签中提取文本内容,才能获取需要的数据。
从标签中提取文本内容可以利用标签的string或text属性。
'''
# print(soup.select('.first')[1].string)
# print(soup.select('.first')[1].text)
'''
运行结果:
None                #string属性提取直系文本,.select('.first')[1]表示提取class标签下的所有'first'属性值中的第二个直系文本,如果存在套用则返回None例如:<div class = 'first'>第一个div<p>first div下的p标签</p><a href="https://www.baidu.com/" title = '百度一下' target="_self" class="first"><spam>a标签下的span标签</spam>first div下的第一个a标签</a><a href="" class="two"></a><img scr="" alt="" /></div>返回None,因为有太多了<p>first div下的p标签</p>返回:first div下的p标签
第一个div            .select('.first')[1].text,表示提取class标签下的所有'first'属性值中的第二个所有文本值。first div下的p标签a标签下的span标签first div下的第一个a标签
'''
#3.2    从标签中提取属性
print(soup.find(class_='first')['class'])
'''
运行结果:
['first', 'ten']
.find(class_='first')定位到第一个class属性值为first的标签,['class']表示提取class的属性值
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503627.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR

目录 1.Jenkins Build时的错误 2.百度文心快码AI智能体帮我解决 提问1&#xff1a;jenkins中如何配置npm的源 提问2&#xff1a;jenkins pipeline 类型为pipeline script from SCM时&#xff0c;如何配置npm源 3.最终解决方法-Jenkinsfile的修改 4.感触 1.Jenkins Build时…

Python学习笔记:显示进度条

文章目录 1. 安装progress包2. 编写程序,实现功能3. 运行程序,查看结果4. 实战小结1. 安装progress包 在Anaconda Prompt里执行命令:pip install progress -i https://pypi.tuna.tsinghua.edu.cn/simple 2. 编写程序,实现功能 创建显示进度条.py程序 """ 功…

搭建企业AI助理的创新应用与案例分析

在大健康零售行业&#xff0c;企业面临着日益增长的市场需求和复杂的供应链管理挑战。AI助理的应用不仅能够提升客户服务效率&#xff0c;还能优化供应链管理&#xff0c;降低运营成本。 一、AI助理在大健康零售行业的创新应用 个性化健康咨询 AI助理可以通过分析客户的健康…

poi-tl+kkviewfile实现生成pdf业务报告

需求背景&#xff0c;需要把ai生成的一些业务数据&#xff0c;生成一份pdf报告 需求分析 简单来说&#xff0c;就是json生成pdf的方案。 直接生成pdf。适合一些pdf样式简单的场景&#xff0c;一般就是纯文本按序渲染&#xff0c;或者是纯表格。如果需要一些复杂的排布&#x…

重温设计模式--13、策略模式

策略模式介绍 文章目录 策略模式介绍C 代码示例 策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。该模式将算法的定义和使用分离开来&#xff0c;使得算法可以独立于使用它的客户端而变化&#xff0c;提高了代码的灵活性和可维护性。 其主要包含以下几个…

nginx http反向代理

系统&#xff1a;Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf&#xff0c;但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件&#xff0c;并在…

Sam Altman发布博客,回顾OpenAI九年历程,直言目标已瞄准ASI超级人工智能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

简单的jmeter数据请求学习

简单的jmeter数据请求学习 1.需求 我们的流程服务由原来的workflow-server调用wfms进行了优化&#xff0c;将wfms服务操作并入了workflow-server中&#xff0c;去除了原来的webservice服务调用形式&#xff0c;增加了并发处理&#xff0c;现在想测试模拟一下&#xff0c;在一…

C++编程基础之override关键字

在C中&#xff0c;override关键字用于显式地标识派生类中的成员函数是对基类中虚函数的重写&#xff0c;具有以下重要作用和使用说明&#xff1a; 作用 增强代码可读性&#xff1a;通过使用override关键字&#xff0c;能够清晰地向阅读代码的人表明该函数是有意重写基类中的虚…

Leecode刷题C语言之按键变更的次数

执行结果:通过 执行用时和内存消耗如下&#xff1a; int countKeyChanges(char* s) {int count0,i0;while(s[i]!\0){if((s[i]!s[i1])&&(s[i]!(s[i1]32))&&(s[i]!(s[i1]-32))&&s[i1]!0)count;i;}return count; }解题思路&#xff1a; 初始化变量&…

免费一键图片转3D模型,AI建模,一键把图片转三维模型,二维图片转3维模型,AI建模

免费一键图片转3D模型&#xff0c;AI建模&#xff0c;一键把图片转三维模型&#xff0c;二维图片转3维模型,AI建模&#xff0c;公测版&#xff0c;每天不定时免费开放&#xff0c;非常强大 1咱们先打开ai.glbxz.com http://ai.glbxz.com 22 2导入图片。支持单张和多张图片生成…

vue3中el-table实现多表头并表格合并行或列

1、el-table中添加事件 :span-method"genderSpanCity" <el-table :span-method"genderSpanCity":data"data.tableData":fit"true" table-layout"fixed" header-align"center" stripestyle"width:100%;he…

GOAT‘S AI早鸟报Part9

资讯 英伟达重磅发布5090&#xff0c;定价15000 老黄重磅发布5090&#xff0c;定价15000&#xff01;22000元的世界最小AI超级计算机也来了 英伟达在CES发布了最新的GPU——RTX 5090&#xff0c;采用Blackwell架构&#xff0c;具备920亿个晶体管&#xff0c;4000 AI TOPS的AI…

【STM32+CubeMX】 新建一个工程(STM32F407)

相关文章&#xff1a; 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定&#xff1a;本系列的前五篇&#xff0c;为了方便新手玩家熟悉CubeMX、Keil的使用&#xff0c;会详细地截图每一步Cu…

HTML5实现喜庆的新年快乐网页源码

HTML5实现喜庆的新年快乐网页源码 前言一、设计来源1.1 主界面1.2 关于新年界面1.3 新年庆祝活动界面1.4 新年活动组织界面1.5 新年祝福订阅界面1.6 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现喜庆的新年快乐网页源码&#xff0c;春节新年网…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

【Linux】Linux指令apt、systemctl、软链接、日期时区

一、apt命令 1.1 Linux系统的应用商店 操作系统安装软件有许多种方式&#xff0c;一般分为&#xff1a; 下载安装包自行安装 如win系统使用exe文件、msi文件等如mac系统使用dmg文件、pkg文件等 系统的应用商店内安装 如win系统有Microsoft Store商店如mac系统有AppStore商…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

C++list

1. list的介绍及使用 1.1list的介绍 list的文档介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双相迭代 2.list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过…