前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python pandas获取网页中的表数据(网页抓取)

Python pandas获取网页中的表数据(网页抓取)

作者头像
fanjy
发布2021-12-11 10:35:20
7.8K0
发布2021-12-11 10:35:20
举报
文章被收录于专栏:完美Excel完美Excel

标签:Python与Excel,pandas

现如今,人们随时随地都可以连接到互联网上,互联网可能是最大的公共数据库,学习如何从互联网上获取数据至关重要。因此,有必要了解如何使用Python和pandas库从web页面获取表数据。此外,如果你已经在使用Excel PowerQuery,这相当于“从Web获取数据”功能,但这里的功能更强大100倍。

从网站获取数据(网页抓取)

HTML是每个网站背后的语言。当我们访问一个网站时,发生的事情如下:

1.在浏览器的地址栏中输入地址(URL),浏览器向目标网站的服务器发送请求。

2.服务器接收请求并发回组成网页的HTML代码。

3.浏览器接收HTML代码,动态运行,并创建一个网页供我们查看。

Web抓取基本上意味着,我们可以使用Python向网站服务器发送请求,接收HTML代码,然后提取所需的数据,而不是使用浏览器。

这里不会涉及太多的HTML,只是介绍一些要点,以便我们对网站和网页抓取的工作原理有一个基本的了解。HTML元素或“HTML标记”是用<>包围的特定关键字。例如,以下HTML代码是网页的标题,将鼠标悬停在网页中该选项卡上,将在浏览器上看到相同的标题。注意,大多数HTML元素都需要一个开始标记(例如,<title>)和一个相应的结束标记(例如,</title>)。

<title>Python pandas获取网页中的表数据(网页抓取)</title>

类似地,下面的代码将在浏览器上绘制一个表,你可以尝试将其复制并粘贴到记事本中,然后将其保存为“表示例.html”文件,应该能够在浏览器中打开它。简要说明如下:

  • <table>…</table>绘制表格
  • <tr>…</tr>在表中绘制一行
  • <th>…</th>表示表格标题
  • <td>…</td>表示表格数据
代码语言:javascript
复制
<html>
    <table>
        <tr>
           <th>用户姓名</th>
           <th>国家</th>
           <th>城市</th>
           <th>性别</th>
           <th>年龄</th>
        </tr>
        <tr>
            <td>Forrest Gump</td>
           <td>USA</td>
           <td>New York</td>
           <td>M></td>
           <td>50</td>
        </tr>
        <tr>
<td>Mary Jane</td>
           <td>CANADA</td>
           <td>Toronto</td>
           <td>F</td>
           <td>30</td>
        </tr>
    </table>
</html>

使用pandas进行网页抓取的要求

了解了网站的基本构建块以及如何解释HTML(至少是表格部分!)。这里只介绍HTML表格的原因是,大多数时候,当我们试图从网站获取数据时,它都是表格格式。pandas是从网站获取表格格式数据的完美工具!

因此,使用pandas从网站获取数据的唯一要求是数据必须存储在表中,或者用HTML术语来讲,存储在<table>…</table>标记中。pandas将能够使用我们刚才介绍的HTML标记提取表、标题和数据行。

如果试图使用pandas从不包含任何表(<table>…</table>标记)的网页中“提取数据”,将无法获取任何数据。对于那些没有存储在表中的数据,我们需要其他方法来抓取网站。

网络抓取示例

我们前面的示例大多是带有几个数据点的小表,让我们使用稍微大一点的更多数据来处理。

我们将从百度百科获取最新世界500公司名称和相关信息:

https://baike.baidu.com/item/%E4%B8%96%E7%95%8C500%E5%BC%BA/640042?fr=aladdin

图1(如果出现错误,根据错误提示处理。我的计算机上是没有安装lxml,安装后正常)

上面的df实际上是一个列表,这很有趣……列表中似乎有3个项目。让我们看看pandas为我们收集了什么数据……

图2

第一个数据框架df[0]似乎与此无关,只是该网页中最先抓取的一个表。查看网页,可以知道这个表是中国举办过的财富全球论坛。

图3

第二个数据框架df[1]是该页面上的另一个表,注意,其末尾,它表示有[500行x 6列]。这个表就是世界财富500强排名表。

图4

第三个数据框架df[2]是该页面上的第3个表,其末尾表示有[110行x 5列]。这个表是中国上榜企业表。

注意,始终要检查pd.read_html()返回的内容,一个网页可能包含多个表,因此将获得数据框架列表,而不是单个数据框架!

注:本文学习整理自pythoninoffice.com。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档