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':
                # 处理找到的元素
                pass
            recursive_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 requests
    
    try:
        response = requests.get(url)
    except requests.exceptions.RequestException as e:
        print("网络请求失败:", e)
    
    

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

    pythonCopy code
    from bs4 import BeautifulSoup
    
    try:
        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 time
    
    max_retries = 3
    retries = 0
    
    while retries < max_retries:
        try:
            response = requests.get(url)
            break
        except requests.exceptions.RequestException as e:
            print("网络请求失败:", e)
            retries += 1
            time.sleep(1)  # 等待一段时间后重试
    
    if retries == max_retries:
        print("重试次数已达上限")
    
    

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

组合数学<1>——组合数学基础

今天我们聊聊组合数学。(本期是给刚刚学习组合数学的同学看的&#xff0c;dalao们可以自行忽略) 建议:不会求逆元的出门左转数论<2>&#xff0c;不会数论的出门右转数论<1>。 加乘原理 加乘原理小学奥数就有。 总的来说:加法原理:分类;乘法原理:分步 比如说&a…

景芯2.5GHz A72训练营dummy添加(一)

景芯A72做完布局布线之后导出GDS&#xff0c;然后进行GDS merge&#xff0c;然后用Calibre对Layout添加Dummy。在28nm以及之前的工艺中&#xff0c;Dummy metal对Timing的影响不是很大&#xff0c;当然Star RC也提供了相应的解决方案&#xff0c;可以考虑Dummy metal来抽取RC。…

【Vector-Map-路径规划(0)】卷首语

因为城市NOA 的开发过程中&#xff0c;十字路口这类场景非常不好处理&#xff0c;个人对路径规划没有什么基础&#xff0c;只知道深度优先&#xff0c;广度优先&#xff0c;A*&#xff0c;Dijkstra等算法&#xff0c;不知道在矢量地图中如何使用&#xff1f;因此花几天时间读几…

【LangChain系列】2. 一文全览LangChain数据连接模块:从文档加载到向量检索RAG,理论+实战+细节

本文学习 LangChain 中的 数据连接&#xff08;Retrieval&#xff09; 模块。该模块提供文档加载、切分&#xff0c;向量存储、检索等操作的封装。最后&#xff0c;结合RAG基本流程&#xff0c;我们将利用LangChain实现RAG的基本流程。 0. 模块介绍 在前面文章中我们已经讲了…

ssm042在线云音乐系统的设计与实现+jsp

在线云音乐系统的设计与实现 摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经…

MySQL 连接查询

目录 连接查询 命令格式&#xff1a; 内连接&#xff1a; 等值连接&#xff1a; 格式&#xff1a; 非等值连接&#xff1a; 格式&#xff1a; 外连接&#xff1a; 左连接&#xff1a; 格式: 结果&#xff1a; 右连接&#xff1a; 格式: 结果&#xff1a; 全外连…

D-LinkNAS 远程命令执行漏洞(CVE-2024-3273)RCE漏

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 D-LinkNAS是由D-Link公司制造的网络附加存储设备。…

01 SQL基础 -- 初识数据库与安装

一、初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database, DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS) 1.1 DBMS 的种类 DBMS 主要通过数据的保存格式…

公众号答疑集锦(4月)之IE,二维声纳,hypack处理内河多波束

1、Inertial Explorer这款软件怎么导出txt或csv格式的轨迹文件&#xff1f; 答&#xff1a;https://mp.weixin.qq.com/s/Rtl_3YJjDQblyVPLXjAmhA。 问&#xff1a;软件需要一个EGM96-World.wpg格式的文件&#xff0c;就是IE这家公司特有的文件格式。我登录他们官网&#xff0…

JAVAEE之Spring AOP

1. AOP概述 AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC) 1.1 什么是AOP&#xff1f; • Aspect Oriented Programming&#xff08;⾯向切⾯编程&#xff09; 什么是⾯向切⾯编程呢? 切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程. 什么是⾯向特定⽅法编…

OpenHarmony南向开发-Docker编译环境

Docker环境介绍 OpenHarmony为开发者提供了两种Docker环境&#xff0c;以帮助开发者快速完成复杂的开发环境准备工作。两种Docker环境及适用场景如下&#xff1a; 独立Docker环境&#xff1a;适用于直接基于Ubuntu、Windows操作系统平台进行版本编译的场景。 基于HPM的Docker…

宏定义(超级详细)

宏定义在编程里面也有十分重要的作用&#xff0c;下面我就来详细介绍一下&#xff1a; 宏的特点 宏主要特点是它在预编译的时候就会被数字或者代码字符替换掉。这样可以将一些重复的变量替换掉&#xff0c;方便我们进行修改&#xff0c;只需要修改宏定义就行了。 宏的几大类…

《一》Qt的概述

1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 1.2 Qt的发展史 1991年 Qt最早由芬兰奇趣科技开发 1996年 进入商业领域&#x…

2024年mathorcup(妈妈杯)数学建模C题思路-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

matlab conv2

MATLAB卷积conv、conv2、convn详解-CSDN博客

全面学习SpringCloud框架指南

要深入学习Spring Cloud框架,你需要系统地掌握其核心组件和概念,并了解如何在实际项目中应用这些知识。以下是一些关键的学习点和相应的学习内容: 一共分为10个模块包括: 1、微服务架构基础: 理解微服务架构的概念和优势。 学习单体架构向微服务架构演进的过程。 掌握…

IE浏览器清理缓存工具

有些项目可能因为浏览器缓存导致使用异常&#xff0c;比如登陆异常。这里提供清除浏览器痕迹的工具&#xff0c;以IE浏览器为例&#xff0c;痕迹的默认存放位置为&#xff1a; C:\Users\Ro\AppData\Local\Microsoft\Windows\Temporary Internet Files 新建bat或者cmd批处理文件…

【LeetCode热题100】189. 轮转数组(数组)

一.题目要求 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 二.题目难度 中等 三.输入样例 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: …

【学习】企业做等保测评有何意义

等保测评是指对信息系统的安全性进行评估和保障的一种标准&#xff0c;其全称为“信息安全等级保护测评”。随着信息技术的不断发展和应用&#xff0c;信息安全问题越来越受到人们的关注。为了保障信息系统的安全&#xff0c;国家制定了一系列的安全等级保护标准&#xff0c;而…

【优选算法专栏】专题四:前缀和(二)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…