网页解析--bs4--01

news2025/1/20 18:29:02

python爬虫之bs4模块(超详细)

Beautiful Soup 4.4.0 文档 — Beautiful Soup 4.2.0 documentation (crummy.com)

可以看到bs4库将网页文件变成了一个soup的类型,

事实上,bs4库 是解析、遍历、维护、“标签树“的功能库。

通俗一点说就是: bs4库把html源代码重新进行了格式化,

从而方便我们对其中的节点、标签、属性等进行操作。

bs4模块是Python爬虫中常用的一个解析库,它可以读取HTML、XML等文档,并将其解析成为Python可以操作的数据结构,方便我们对其中的数据进行提取和处理。

下面是一个使用bs4模块实现爬取网页并提取数据的详细流程:

首先,我们需要安装bs4模块。可以使用pip命令进行安装:

pip install bs4

然后,我们可以使用requests模块来请求一个网页:

import requests

url = 'https://www.example.com'
response = requests.get(url)

1.创造一个BeautifulSoup对象

bs_1=BeautifulSoup(r1.text,'lxml')#print(bs_1)

接下来,我们需要将获取到的HTML文档交给bs4模块进行解析。

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.content, 'html.parser')

第一个参数是要解析的HTML文档内容(可以是字符串、文件对象或其他类型),第二个参数是指定解析器,这里使用了Python自带的html.parser解析器。

解析器

解析实列

假设我们要提取网页中的标题:

title = soup.title.string

其中,soup.title表示获取HTML文档中的<title>标签,.string表示获取该标签的文本内容,即标题。

如果我们要提取网页中的链接

links = []
for link in soup.find_all('a'):
    href = link.get('href')
    if href isnotNone:
        links.append(href)

其中,.find_all()方法可以用来查找所有匹配指定标签名的标签。这里使用了<a>标签作为示例,.get()方法可以获取该标签中的属性值。

最后,我们需要将获取到的数据进行处理并保存:

综上所述,使用bs4模块进行Python爬虫开发主要流程包括:请求网页、解析HTML文档、提取数据和保存数据。在实际开发过程中,需要根据具体情况进行灵活应用。

二、BeautifulSoup四大对象种类

BeautifulSoup库中有四种对象类型,分别为:

1. Tag对象:代表 HTML或XML文档中的标签,每个Tag对象可以由多个属性组成;
2. NavigableString对象:即可遍历字符串,代表 标签里的文本内容
3. BeautifulSoup对象:即整个 文档树形结构。它最初是从一个HTML或XML文档解析而来的;
4. Comment对象:代表HTML或XML文档中 注释的部分

具体来说,Tag对象是在解析HTML或XML文档时生成的。它们会嵌套在各个层次中,可以包含其他的Tag对象和NavigableString对象,因此它们可以看作是一种容器。每个Tag对象都有自己的名称、属性(仅限于HTML/XML规范中定义的属性)和子节点。

NavigableString对象表示HTML或XML文档中的一段文字,相当于标签内的字符串。这种对象通常用来提取标签里面的内容。

BeautifulSoup对象是对整个HTML或XML文档的一个抽象,相当于整个文档的根节点。它保存了整个文档的全部结构信息,方便用户进行各种查询、搜索和操作。

Comment对象表示HTML或XML文档中的注释部分,可以通过这个对象获取到页面中所有的注释信息。

tag

  • find(name, attrs, recursive, string, **kwargs):根据标签名、属性、内容等查找符合条件的第一个子孙节点,并返回一个Tag对象;
  • find_all(name, attrs, recursive, string, limit, **kwargs):根据标签名、属性、内容等查找所有符合条件的子孙节点,并以列表形式返回多个Tag对象;
  • select(css_selector):根据CSS选择器选择匹配的标签,并以列表形式返回多个Tag对象;
  • get_text():获取当前标签下所有文本信息;
  • string:获取当前标签内部的字符串信息;
  • attrs:以字典形式返回当前标签的所有属性和属性值;
  • name:获取当前标签的名称;
  • parent:获取当前标签的父亲标签;
  • next_sibling:获取当前标签的下一个兄弟标签;
  • previous_sibling:获取当前标签的前一个兄弟标签;
  • has_attr(key):判断当前标签是否存在指定的属性;
  • replace_with(new_tag):将当前标签替换为新标签。

2、其他三个对

  1. NavigableString对象的使用方法
  • string:获取当前文本节点内部的字符串信息。
  1. BeautifulSoup对象的使用方法
  • prettify():美化HTML或XML文档格式;
  • get_text():获取整个文档中所有非脚本和样式标签的文本内容;
  • find(name, attrs, recursive, string, **kwargs):根据标签名、属性、内容等查找符合条件的第一个子孙节点,并返回一个Tag对象。
  1. Comment对象的使用方法
  • string:获取当前注释节点内部的字符串信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis基础总结-常用命令

redis常用指令3. 常用指令3.1 key 操作分析3.1.1 key应该设计哪些操作&#xff1f;3.1.2 key 基本操作3.1.3 key 扩展操作&#xff08;时效性控制&#xff09;3.1.4 key 扩展操作&#xff08;查询模式&#xff09;3.2 数据库指令3.2.1 key 的重复问题3.2.2 解决方案3.2.3 数据库…

001:Mapbox GL加载基础的地图

第001个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载最基础的 Mapbox GL地图 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共59行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

无限制翻译软件-中英互译字数无限

翻译软件是我们工作及学习中必不可少的工具&#xff0c;然而许多翻译软件在使用时常常会出现字数限制的问题,这使得用户在处理长文本和大量文本时变得十分麻烦。如果你也遇到了类似的问题&#xff0c;那么哪个翻译软件不限制字数将为您带来全新的翻译体验。 以下是我们的哪个翻…

人人都是ChatGPT prompt 工程师

关于 Prompt ​ 解释这个词之前&#xff0c;首先需要解释 prompt 这个词&#xff1a; 简单的理解它是给 AI 模型的指令。 它可以是一个问题、一段文字描述&#xff0c;甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息&#xff0c;生成对应的文本&…

Spark SQL join操作详解

一、 数据准备 本文主要介绍 Spark SQL 的多表连接&#xff0c;需要预先准备测试数据。分别创建员工和部门的 Datafame&#xff0c;并注册为临时视图&#xff0c;代码如下&#xff1a; val spark SparkSession.builder().appName("aggregations").master("lo…

腾讯云服务器CVM标准型S5和S6区别性能评测

腾讯云服务器CVM标准型S5是次新一代云服务器规格&#xff0c;标准型S6是最新一代的云服务器&#xff0c;S6实例的CPU处理器主频性能要高于S5实例&#xff0c;同CPU内存配置下的标准型S6实例要比S5实例性能更好一些&#xff0c;但是目前标准型S5实例活动较多&#xff0c;云服务器…

【ChatGPT】预训练模型微调及其应用(ChatGLM-6B、duckduckgo_search、GPT在科研的应用等)

note instructGPT&#xff08;基于提示学习的系列模型&#xff09;——>GPT3.5&#xff08;大规模预训练语言模型&#xff09;——>ChatGPT模型&#xff08;高质量数据标注反馈学习&#xff09;。chatGPT三大技术&#xff1a;情景学习、思维链、自然指令学习。GPT4飞跃式…

ASEMI代理AD9833BRMZ-REEL原装ADI车规级AD9833BRMZ-REEL

编辑&#xff1a;ll ASEMI代理AD9833BRMZ-REEL原装ADI车规级AD9833BRMZ-REEL 型号&#xff1a;AD9833BRMZ-REEL 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;MSOP-10 批号&#xff1a;2023 引脚数量&#xff1a;10 安装类型&#xff1a;表面贴装型 AD9833BRMZ-REEL汽车…

【都2023年了,还在问网络安全怎么入门】

前言 【都2023年了&#xff0c;还在问网络安全怎么入门】所以这一期就出一一个怎么学习网络安全的学习路线和方法&#xff0c;觉得有用的话点赞收藏下 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有…

数据库系统概论--第二章课后习题

1.试述关系模型的三个组成部分。 答&#xff1a; 关系模型由关系数据结构、&#xff08;关系操作集合&#xff09;和&#xff08;关系完整性约束&#xff09;三部分组成。 2. 简述关系数据语言的特点和分类。 答:特点:1)集合操作方式; 2)高度非过程化; 3)集查询、DDL、DML、…

【C++STL精讲】string类的基本使用与常用接口

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;为什么要学习string类&#xff1f;&#x1f337;string类的基本使用&#x1f337;string类的常用接口&#x1f33a;数据访问函数&#x1f33a;容量相关函数&#x1f33a;操作函数&#x1f337;迭代器与范围for…

“三步走”推动云原生转型之路

对于企业而言&#xff0c;如何平稳的从传统研发模式过渡到云原生时代&#xff0c;除了坚持结合云原生应用的特点&#xff0c;持续推动基础架构和应用架构的转型&#xff0c;还需要围绕“深度融合云技术能力、做厚业务基础能力、提升内建质量”等三个步骤&#xff0c;推进云原生…

SpringBoot 防护XSS攻击

目录 一、前言 1.1、XSS攻击流程 1.2、XSS攻击分类 1.3、攻击方式 二、解决方案 2.1、SPRINGBOOT XSS过滤插件&#xff08;MICA-XSS&#xff09; 2.2、MICA-XSS 配置 三、项目实战 3.1、项目环境 3.2、测试 3.2.1、测试GET请求 3.2.2、测试POST请求 3.2.3、测试POS…

优秀测试工程师必须掌握的关系型和非关系型数据库

写在前面 如果平时没有接触到数据库&#xff0c;或者接触数据库不够深入&#xff0c;那么这篇文章很适合你&#xff0c;这篇文章主要从关系性和非关系型数据库的适用场景出发&#xff0c;介绍了MySQL,MongoDB,Redis数据库的安装&#xff0c;备份和常用命令以及MySQL的性能测试…

CRM客户管理软件开发功能有哪些?

互联网技术的不断提高使得企业管理方式也发生了变化&#xff0c;企业CRM系统应用市场逐渐扩大&#xff0c;相关软件开发也引起越来越多商家企业的关注。因为企业CRM系统软件开发能够根据企业需求制作&#xff0c;帮助企业更好的追踪管理客户信息&#xff0c;实时更新并进行相关…

Amazon SageMaker简直就是机器学习平台的天花板

一、前言 最近参与了亚马逊云科技【云上探索实验】活动&#xff0c;通过Amazon SageMaker基于Stable Diffusion模型&#xff0c;非常简单快速搭建的第一个AIGC&#xff0c;一开始以为非常复杂&#xff0c;不懂动手操作&#xff0c;但实际上操作非常简单&#xff0c;没有想象中…

自己开发X86操作系统--LIUNUXOS

为了纪念Linus Torvalds创始开发的linux&#xff0c;我将自己开发的os命名为LIUNUXOS。 LIUNUXOS其原码分为两个部分&#xff0c;汇编工程和c/c工程&#xff0c;地址分别为&#xff1a; LIUNUXOS汇编工程原码地址 LIUNUXOS c/c工程原码地址 在这些工程中&#xff0c;源程序的…

Grafana获取URL地址中的json数据

官方教程&#xff1a;https://grafana.github.io/grafana-json-datasource/query-editor 文章目录配置Grafana的JSON API插件模拟URL路由配置插件展示json数据最终效果配置Grafana的JSON API插件 直接在界面中下载这个插件即可&#xff1a; 也可以使用命令安装&#xff1a; …

Python每日一练(20230411)

目录 1. 环形链表 &#x1f31f; 2. 比较版本号 &#x1f31f;&#x1f31f; 3. 基本计算器 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

hbuildX运行uniapp项目到andiord真机调试

一、打开手机开发者模式 我的是小米手机&#xff0c;这里就介绍一下小米手机如何打开开发者模式。其他机型可以百度一下。 1、手机 桌面 找到【设置】点击打开 2、点击【我的设备】。 3、进入后上滑&#xff0c;看见【全部参数】的按钮&#xff0c;点击打开 4、进入后上滑…