python爬虫----BeautifulSoup(第二十天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

兄弟姐妹们,大家好哇!今天我们来学习python爬虫解析的最后一部分—BeautifulSoup的相关知识

一、BeautifulSoup详解

当使用Python进行网页爬取时,BeautifulSoup是一个非常有用的工具,可以帮助解析HTML和XML文档,提取其中的数据。下面详细讲解一下BeautifulSoup的各个知识点:

  1. 安装BeautifulSoup库
    • 使用pip安装:pip install beautifulsoup4
  2. 导入BeautifulSoup库
    • 导入BeautifulSoup类:from bs4 import BeautifulSoup
  3. 创建BeautifulSoup对象
    • 从本地文件创建:
with open("index.html") as file:soup = BeautifulSoup(file, "html.parser")
     从URL创建:

当使用Python进行网页爬取时,BeautifulSoup是一个非常有用的工具,可以帮助解析HTML和XML文档,提取其中的数据。下面详细讲解一下BeautifulSoup的各个知识点:

  1. 安装BeautifulSoup库
    • 使用pip安装:pip install beautifulsoup4
  2. 导入BeautifulSoup库
    • 导入BeautifulSoup类:from bs4 import BeautifulSoup
  3. 创建BeautifulSoup对象
    • 从本地文件创建:

      pythonCopy code
      with open("index.html") as file:soup = BeautifulSoup(file, "html.parser")
    • 从URL创建:

      pythonCopy code
      import requests
      response = requests.get("<http://example.com>")
      soup = BeautifulSoup(response.text, "html.parser")

当使用Python进行网页爬取时,BeautifulSoup是一个非常有用的工具,可以帮助解析HTML和XML文档,提取其中的数据。下面详细讲解一下BeautifulSoup的各个知识点:

  1. 安装BeautifulSoup库

    • 使用pip安装:pip install beautifulsoup4
  2. 导入BeautifulSoup库

    • 导入BeautifulSoup类:from bs4 import BeautifulSoup
  3. 创建BeautifulSoup对象

    • 从本地文件创建:

      pythonCopy code
      with open("index.html") as file:soup = BeautifulSoup(file, "html.parser")
    • 从URL创建:

      pythonCopy code
      import requests
      response = requests.get("<http://example.com>")
      soup = BeautifulSoup(response.text, "html.parser")
  4. BeautifulSoup对象的基本属性和方法

    BeautifulSoup对象是BeautifulSoup库中的核心对象,代表了整个解析树结构,提供了许多属性和方法来操作和处理HTML或XML文档。以下是BeautifulSoup对象的一些基本属性和方法:

    (1)属性

    • soup.title:返回文档的标题标签(<title>)。
    • soup.body:返回文档的主体内容标签(<body>)。
    • soup.head:返回文档的头部内容标签(<head>)。
    • soup.attrs:返回文档的属性字典。

    (2)方法

    • soup.find(name, attrs, recursive, text, **kwargs):查找符合条件的第一个标签。
    • soup.find_all(name, attrs, recursive, text, limit, **kwargs):查找符合条件的所有标签,返回一个列表。
    • soup.select(selector):使用CSS选择器查找符合条件的标签,返回一个列表。
    • soup.get_text(separator, strip, types):获取文档中所有文本内容,可以指定分隔符、是否去除空白字符等参数。
    • soup.prettify(formatter=None):格式化输出HTML文档,使其更易读。

    以上是BeautifulSoup对象的一些基本属性和方法,可以帮助我们在解析HTML或XML文档时进行定位、提取和处理内容。

  5. 解析HTML文档

    解析HTML文档是使用BeautifulSoup库的一个重要功能,它可以帮助我们从HTML文档中提取出我们需要的数据。以下是解析HTML文档的基本方法:

    (1)创建BeautifulSoup对象: 首先,我们需要创建一个BeautifulSoup对象,将HTML文档传入BeautifulSoup构造函数中进行解析。

    pythonCopy code
    from bs4 import BeautifulSoup# 将HTML文档传入BeautifulSoup构造函数中进行解析
    soup = BeautifulSoup(html_doc, 'html.parser')

    这里的**html_doc**可以是一个HTML字符串,也可以是一个文件对象,包含了要解析的HTML文档内容。

    (2)使用标签选择器: 使用标签选择器可以选择指定标签名称的元素。

    pythonCopy code
    # 查找第一个符合条件的标签
    tag = soup.tag_name# 查找所有符合条件的标签,返回一个列表
    tags = soup.find_all('tag_name')

    (3)使用CSS选择器: 使用CSS选择器可以根据类名、id等属性选择元素。

    pythonCopy code
    # 使用CSS类名选择元素
    tags = soup.select('.class_name')# 使用id选择元素
    tag = soup.select('#id_name')

    (4)提取数据: 一旦找到了需要的元素,可以使用标签的属性和方法来提取其中的数据。

    pythonCopy code
    # 获取标签的文本内容
    text = tag.get_text()# 获取标签的属性值
    attribute_value = tag['attribute_name']

    (5)遍历文档树: 可以遍历文档树来查找特定元素或者进行数据提取。

    pythonCopy code
    # 遍历子节点
    for child in tag.children:print(child)# 遍历父节点
    for parent in tag.parents:print(parent)# 遍历兄弟节点
    for sibling in tag.next_siblings:print(sibling)

    (6)示例代码: 下面是一个简单的示例代码,演示了如何解析HTML文档并提取出其中的链接。

    pythonCopy code
    from bs4 import BeautifulSoup
    import requests# 发送HTTP请求获取HTML内容
    response = requests.get('<http://example.com>')
    html_doc = response.text# 创建BeautifulSoup对象
    soup = BeautifulSoup(html_doc, 'html.parser')# 查找所有链接
    links = soup.find_all('a')# 输出所有链接
    for link in links:print(link.get('href'))

    以上是解析HTML文档的基本方法,通过这些方法可以方便地从HTML文档中提取出所需的数据。

  6. 提取数据

    在使用BeautifulSoup解析HTML文档时,提取数据是一个常见的操作。可以通过查找特定的HTML标签或使用CSS选择器来定位需要的数据,并从中提取出文本内容、链接、属性等信息。以下是一些常用的方法:

    (1)查找单个元素: 使用**find()**方法查找符合条件的第一个元素,并提取其中的数据。

    pythonCopy code
    # 查找第一个<h1>标签,并提取其文本内容
    heading = soup.find('h1')
    heading_text = heading.get_text()

    (2)查找多个元素: 使用**find_all()**方法查找所有符合条件的元素,并提取其中的数据。

    pythonCopy code
    # 查找所有<p>标签,并提取它们的文本内容
    paragraphs = soup.find_all('p')
    for paragraph in paragraphs:print(paragraph.get_text())

    (3)使用CSS选择器: 使用**select()**方法结合CSS选择器查找元素,并提取其中的数据。

    pythonCopy code
    # 使用CSS类选择器查找所有class为"content"的元素,并提取它们的文本内容
    contents = soup.select('.content')
    for content in contents:print(content.get_text())

    (4)提取属性: 可以使用标签对象的**['attribute_name']**语法来提取属性值。

    pythonCopy code
    # 获取第一个链接的href属性值
    link = soup.find('a')
    href = link['href']

    (5)提取链接: 可以通过查找**<a>标签并提取其href**属性来获取链接。

    pythonCopy code
    # 查找所有链接并提取它们的href属性值
    links = soup.find_all('a')
    for link in links:print(link['href'])

    这些是一些常用的提取数据的方法,通过这些方法可以轻松地从HTML文档中提取出需要的数据。

  7. 遍历文档树

    在使用BeautifulSoup解析HTML文档时,遍历文档树是一种常用的操作,可以帮助我们查找特定的元素、理解文档的结构以及提取数据。以下是几种常见的遍历文档树的方法:

    (1)子节点遍历: 使用**children**属性可以遍历当前元素的直接子节点。

    pythonCopy code
    # 遍历<body>标签的直接子节点
    body = soup.body
    for child in body.children:print(child)

    (2)父节点遍历: 使用**parents**属性可以遍历当前元素的所有父节点。

    pythonCopy code
    # 遍历某个标签的所有父节点
    tag = soup.find('tag_name')
    for parent in tag.parents:print(parent)

    (3)兄弟节点遍历: 使用**next_siblingsprevious_siblings**属性可以遍历当前元素的兄弟节点。

    pythonCopy code
    # 遍历当前元素之后的兄弟节点
    for sibling in tag.next_siblings:print(sibling)# 遍历当前元素之前的兄弟节点
    for sibling in tag.previous_siblings:print(sibling)

    (4)递归遍历: 使用递归方法可以遍历整个文档树,查找特定元素或提取数据。

    pythonCopy code
    def recursive_search(element):for child in element.children:if child.name == 'tag_name':# 处理找到的元素passrecursive_search(child)recursive_search(soup)

    通过以上方法,可以有效地遍历HTML文档的文档树,并根据需要查找特定的元素或提取数据。

  8. 数据清洗与处理

    在使用BeautifulSoup解析HTML文档提取数据时,有时候需要对提取出来的数据进行清洗和处理,以便进一步处理或展示。以下是一些常见的数据清洗与处理方法:

    (1)去除空白字符: 使用**strip=True**参数可以去除文本内容中的空白字符(空格、换行符等)。

    pythonCopy code
    # 去除文本内容中的空白字符
    text = tag.get_text(strip=True)

    (2)去除HTML标签: 使用**get_text()**方法可以获取元素的纯文本内容,去除其中的HTML标签。

    pythonCopy code
    # 去除HTML标签,获取纯文本内容
    text = BeautifulSoup(html, "html.parser").get_text()

    (3)提取特定格式的数据: 使用正则表达式等方法可以提取出特定格式的数据,如日期、数字等。

    pythonCopy code
    import re# 使用正则表达式提取日期
    date_pattern = re.compile(r'\\d{4}-\\d{2}-\\d{2}')
    dates = date_pattern.findall(text)

    (4)处理特殊字符: 处理文本中的特殊字符,如Unicode字符、HTML实体等。

    pythonCopy code
    # 处理文本中的特殊字符
    cleaned_text = text.replace('&nbsp;', ' ')

    (5)数据格式化: 对提取出来的数据进行格式化,使其符合特定的要求。

    pythonCopy code
    # 格式化数据
    formatted_data = '{:.2f}'.format(float(data))

    通过这些方法,可以对提取出来的数据进行清洗和处理,使其符合需要的格式和要求,方便后续的处理和使用。

  9. 异常处理

    在使用BeautifulSoup进行网页解析时,可能会遇到各种异常情况,例如网络请求失败、HTML解析错误等。为了增强程序的健壮性和稳定性,需要进行适当的异常处理。以下是一些常见的异常处理方法:

    (1)网络请求异常: 当网络请求失败时,可以捕获**requests库的RequestException**异常。

    pythonCopy code
    import requeststry:response = requests.get(url)
    except requests.exceptions.RequestException as e:print("网络请求失败:", e)

    (2)HTML解析异常: 在解析HTML文档时,可能会遇到无效的HTML代码或者解析错误,可以捕获**BeautifulSoup库的BeautifulSoup**异常。

    pythonCopy code
    from bs4 import BeautifulSouptry:soup = BeautifulSoup(html_doc, 'html.parser')
    except BeautifulSoup as e:print("HTML解析错误:", e)

    (3)其他异常: 可以捕获其他可能出现的异常,以保证程序的稳定性。

    pythonCopy code
    try:# 其他操作
    except Exception as e:print("发生异常:", e)

    (4)异常处理与重试: 在发生网络请求失败等异常时,可以选择进行异常处理并尝试重试操作。

    pythonCopy code
    import requests
    import timemax_retries = 3
    retries = 0while retries < max_retries:try:response = requests.get(url)breakexcept requests.exceptions.RequestException as e:print("网络请求失败:", e)retries += 1time.sleep(1)  # 等待一段时间后重试if retries == max_retries:print("重试次数已达上限")

    通过合理的异常处理,可以提高程序的健壮性,避免因异常情况导致程序崩溃或无法正常运行。

以上是BeautifulSoup库的基本知识点和常用方法,通过熟练掌握这些内容,可以有效地进行网页数据的抓取和处理。

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

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

相关文章

Linux/October

October Enumeration Nmap 扫描发现对外开放了22和80端口&#xff0c;使用nmap详细扫描这两个端口 ┌──(kali㉿kali)-[~/vegetable/HTB/October] └─$ nmap -sC -sV -p 22,80 -oA nmap 10.10.10.16 Starting Nmap 7.…

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的笔记记录分享网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

华为OD技术面试-有序数组第K最小值

背景 2024-03-15华为od 二面&#xff0c;记录结题过程 有序矩阵中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/submissions/512483717/ 题目 给你一个 n x n 矩阵 matrix &#xff0c;其…

基于spring boot的班级综合测评管理系统

基于spring boot的班级综合测评管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

总分410+专业130+国防科技大学831信号与系统考研经验国防科大电子信息与通信工程,真题,大纲,参考书。

好几个学弟催着&#xff0c;总结一下我自己的复习经历&#xff0c;希望大家复习少走弯路&#xff0c;投入的复习正比换回分数。我专业课831信号与系统130&#xff08;感觉比估分要低&#xff0c;后面找Jenny老师讨论了自己拿不准的地方也没有错误&#xff0c;心里最近也这经常回…

蓝桥备赛——组合数、其他技巧

对字符串进行permutations排列组合 from itertools import permutations a abc #对字符串进行permutations排列组合 for i in permutations(a,3):x .join(i)print (x,end ) print (\n------------------------------------) permutations后面的参数&#xff0c;第一个表示…

有趣的css - 动态雷达扫描

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是使用 css 实现一个动态的雷达扫描&#xff0c;快学起来吧&#xff01; 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码…

[2024最新]MySQL-mysql 8.0.11安装教程

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。 安装环境&#xff1a;win 10 1、下载zip安装包&#xff1a; MySQL8.0 For Windows zip包下载地…

可视化大屏的应用(12):在智慧制造中的十大价值

一、什么是智慧制造 智慧制造是指通过信息技术、物联网、人工智能等先进技术的应用&#xff0c;实现生产过程的数字化、网络化、智能化&#xff0c;从而提高生产效率、降低成本、提高产品质量和灵活性的一种制造模式。 智慧制造的核心是将传统的制造过程与先进的信息技术相结合…

前端自动化测试-Jest

前端自动化测试 Jest官网&#xff1a;https://jestjs.io 安装方式 npm install --save-dev jest yarn add --dev jest cnpm add --save-dev jest 使用方法 所有以 .test.js 结尾的都是测试文件 基础用法示例 num.js&#xff1a; export function getSum (a, b) {return a b…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

手把手教你从零搭建ChatGPT网站AI绘画系统,(SparkAi系统V6)GPTs应用、DALL-E3文生图、AI换脸、垫图混图、SunoAI音乐生成

一、系统前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

智能Java开发工具IntelliJ IDEA v2024.1震撼发布——让开发工作更简单!

IntelliJ IDEA&#xff0c;是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 立…

必须掌握的这4种缓存模式

概述 在系统架构中&#xff0c;缓存可谓提供系统性能的简单方法之一&#xff0c;稍微有点开发经验的同学必然会与缓存打过交道&#xff0c;起码也实践过。 如果使用得当&#xff0c;缓存可以减少响应时间、减少数据库负载以及节省成本。但如果缓存使用不当&#xff0c;则可能…

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件&#xff08;不推荐&#xff09;2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中&#xff0c;经常会…

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理&#xff1a;快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”&#xff0c;将待排序序列划分为两个子序列&#xff0c;使得左边的子序列中的所有元素都小于基准&#xff0c;右边的子序列中的所有元素都大于基准。这个划分操作被称为分…