IBM-数据科学-V-笔记-全-

IBM 数据科学 V 笔记(全)

001:网页抓取与HTML基础 🌐

在本节课中,我们将学习超文本标记语言(HTML)的基础知识,这是进行网页抓取的关键。网页上包含大量有用数据,例如房地产价格和编程问题解答。互联网,特别是像维基百科这样的网站,是世界信息的宝库。理解HTML结构后,你就可以使用Python来提取这些信息。

本节课我们将回顾一个基础网页的HTML结构,包括HTML标签的构成、HTML树状结构以及HTML表格。

HTML基础结构 🏗️

假设你需要从一个网页中找出国家篮球联盟球员的姓名和薪水。网页由HTML构成,它包含一系列被尖括号包围的标签所环绕的文本。这些标签告诉浏览器如何显示内容,而我们所需的数据就在这些文本中。

一个HTML文档的第一部分包含文档类型声明 <!DOCTYPE html>,它声明此文档是一个HTML5文档。

<html> 元素是HTML页面的根元素。<head> 元素包含关于HTML页面的元信息。接下来是 <body>,这是网页上实际显示的内容,通常也是我们感兴趣的数据所在。

例如,我们看到带有 <h3> 标签的元素,这表示三级标题,会使文本变大加粗。这些标签内包含球员的姓名。数据被包裹在元素中,以 <h3> 开始,以 </h3> 结束。此外,还有不同的 <p> 标签,表示段落,其中包含球员的薪水。

HTML标签的构成 🔍

让我们仔细看看HTML标签的构成。以下是一个HTML锚点标签的例子:

<a href="https://www.ibm.com">IBM</a>

它将显示“IBM”,点击后会跳转到 ibm.com。这里,标签名是 a,这个标签定义了一个超链接,用于从一个页面链接到另一个页面。

将每个标签名视为Python中的一个类,每个单独的标签视为一个实例,有助于理解。我们有开始标签 <a> 和结束标签 </a>。这些标签包含内容,即网页上显示的部分。我们还有属性,由属性名和属性值组成,在这个例子中是目标网页的URL href="https://www.ibm.com"

真实的网页更为复杂。根据你使用的浏览器,你可以选择HTML元素并点击“检查”,这将允许你查看页面的HTML代码。网页中还有其他类型的内容,如CSS和JavaScript,本课程暂不涉及。

HTML树状结构 🌳

每个HTML文档实际上都可以被称为一个文档树。让我们看一个简单的例子。标签可以包含字符串和其他标签,这些元素是标签的子元素。我们可以将其表示为一个家谱,每个嵌套的标签都是树中的一个层级。

例如,<html> 标签包含 <head><body> 标签。<head><body> 标签是 <html> 标签的后代,具体来说,是它的子元素。<html> 标签是它们的父元素。<head><body> 标签是兄弟元素,因为它们在同一层级。

<title> 标签是 <head> 标签的子元素,其父元素是 <head> 标签。<title> 标签是 <html> 标签的后代,但不是它的直接子元素。标题和段落标签是 <body> 标签的子元素,并且因为它们都是 <body> 标签的子元素,所以彼此是兄弟元素。<b> 加粗标签是标题标签的子元素。标签的内容也是树的一部分,但画出来可能会很繁琐。

HTML表格 📊

接下来,让我们回顾HTML表格。要定义一个HTML表格,我们使用 <table> 标签。

以下是定义表格的基本结构:

<table>
  <tr>
    <th>表头1</th>
    <th>表头2</th>
  </tr>
  <tr>
    <td>第一行,第一单元格</td>
    <td>第一行,第二单元格</td>
  </tr>
  <tr>
    <td>第二行,第一单元格</td>
    <td>第二行,第二单元格</td>
  </tr>
</table>

  • <table>: 定义整个表格。
  • <tr>: 定义表格中的一行。
  • <th>: 通常用于第一行,定义表头单元格(默认加粗居中)。
  • <td>: 定义表格中的标准数据单元格。

对于第一行,第一个单元格我们使用 <th>,第二个单元格也是 <th>。对于第二行,第一个单元格我们使用 <td>,第二个单元格也是 <td>,依此类推。

总结 📝

本节课我们一起学习了HTML的基础知识,这是进行网页抓取的第一步。我们了解了HTML文档的基本结构,包括 <html><head><body> 标签。我们深入探讨了HTML标签的构成,如开始标签、结束标签和属性。我们还学习了如何将HTML文档视为一个树状结构,理解标签之间的父子与兄弟关系。最后,我们介绍了如何使用 <table><tr><th><td> 标签来创建HTML表格。

掌握了这些HTML基础知识后,在接下来的课程中,我们就可以开始学习如何使用Python工具来解析HTML并提取我们所需的数据了。

002:网络数据采集 🌐

在本节课中,我们将要学习网络数据采集。这是一种自动从网站提取信息的技术,能够帮助我们在几分钟内完成原本需要数小时的手动数据收集工作。

概述 📋

网络数据采集是一个用于自动从网站提取信息的过程。想象一下,如果你需要分析一个体育队数百名球员的数据以找出最佳球员,手动从不同网站复制粘贴信息到电子表格中会非常耗时且容易让人放弃。网络数据采集可以解决这个问题。

什么是网络数据采集? 🤔

网络数据采集是一种利用代码自动从网页中提取所需数据的技术。它通常借助Python中的 requestsBeautiful Soup 等模块来实现。

开始之前:所需工具 🛠️

要开始网络数据采集,我们只需要一些Python代码以及两个模块的帮助:requestsBeautiful Soup

假设你需要从一个网页中找出国家篮球联赛球员的姓名和薪水。

Beautiful Soup 对象解析 🌳

首先,我们导入Beautiful Soup。我们可以将网页HTML作为字符串存储在变量 html 中。为了解析这个文档,我们将其传递给Beautiful Soup的构造函数。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')

这样我们就得到了一个Beautiful Soup对象 soup,它将文档表示为一个嵌套的数据结构。这个对象将HTML表示为一组树状对象,并提供了用于解析HTML的方法。

理解Tag对象

使用我们创建的Beautiful Soup对象 soupTag 对象对应于原始文档中的一个HTML标签。例如,title 标签。

考虑 h3 标签。如果文档中有多个相同名称的标签,默认会选择第一个具有该标签的元素。例如,第一个 h3 标签可能包含“勒布朗·詹姆斯”这个名字,并且这个名字被包裹在加粗属性 <b> 中。

为了提取它,我们需要使用树状表示法来导航。

在HTML树中导航 🧭

上一节我们介绍了Tag对象,本节中我们来看看如何在HTML的树状结构中移动。

访问子节点

变量 tag_object 位于树的某个位置。我们可以像下面这样访问该标签的子节点,或者向下导航到分支:

tag_child = tag_object.b

访问父节点

你可以使用 .parent 属性向上导航树。变量 tag_child 位于这里,我们可以访问它的父节点,这就是原始的 tag_object

parent_tag = tag_child.parent

访问兄弟节点

我们还可以找到Tag对象的兄弟节点。我们只需使用 .next_sibling 属性。

我们可以找到 sibling1 的兄弟节点。我们只需使用 .next_sibling 属性。

考虑 tag_child 对象。你可以像字典中的键值对一样访问其属性名称和值:

tag_child['some_attribute']

你可以将内容作为可导航字符串返回。这类似于支持Beautiful Soup功能的Python字符串。

使用 find_all 方法进行过滤 🔍

现在,让我们回顾一下 find_all 方法。这是一个过滤器。

你可以使用过滤器基于标签的名称、其属性、字符串的文本或这些条件的组合来进行过滤。

考虑一个披萨店的列表。像之前一样,创建一个Beautiful Soup对象,但这次将其命名为 table

find_all 方法会遍历一个标签的所有后代,并检索所有符合你过滤条件的后代。将其应用于标签为 tr 的表格:

rows = table.find_all('tr')

结果是一个类似列表的Python可迭代对象。每个元素都是一个 tr 的Tag对象,对应列表中的每一行,包括表头。

每个元素都是一个Tag对象。以第一行为例,我们可以提取第一个表格单元格:

first_cell = rows[0].td

我们也可以遍历每个表格单元格。首先,我们通过变量 row 遍历列表 rows。每个元素对应表格中的一行。

我们可以应用 find_all 方法来查找所有的表格单元格。然后,我们可以为每一行遍历变量 cells

在每次迭代中,变量 cell 对应特定行中表格的一个元素,我们继续遍历每个元素,并为每一行重复这个过程。

应用Beautiful Soup采集网页 🌍

为了采集一个网页,我们还需要 requests 库。

第一步是导入所需的模块。使用 requests 库的 get 方法来下载网页,输入是URL。使用 .text 属性来获取文本。

以下是具体步骤:

  1. 导入必要的模块。
  2. 使用 requests.get() 下载网页。
  3. 将响应文本赋值给变量 page
  4. 从变量 page 创建一个Beautiful Soup对象 soup

import requests
from bs4 import BeautifulSoup

![](https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-dtsci-5/img/0fc8b290f2b7446a518df44881497f79_46.png)

![](https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-dtsci-5/img/0fc8b290f2b7446a518df44881497f79_47.png)

url = ‘https://example.com‘
response = requests.get(url)
page = response.text
soup = BeautifulSoup(page, ‘html.parser‘)

这将允许你解析HTML页面,现在你就可以开始采集页面了。请查看实验部分以了解更多。

总结 📝

本节课中我们一起学习了网络数据采集。我们定义了网络数据采集,了解了Beautiful Soup对象的作用,学习了如何应用 find_all 方法,并掌握了使用Python采集一个网站的基本流程。通过结合 requests 库获取网页内容,再利用 Beautiful Soup 解析和提取HTML结构中的数据,我们可以高效地自动化数据收集任务。

posted @ 2026-03-26 08:53  布客飞龙II  阅读(0)  评论(0)    收藏  举报