BeautifulSoup 表到数据框

2024-01-28

似乎无法将表中的值正确复制到数据框中。如果运行 raw_data,它会输出所有值的列表。知道如何使其结构化吗?

pop_source = requests.get("http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm").text

soup = BeautifulSoup(pop_source, 'html5lib')    
source = soup.find_all('td',class_ = 'report_data')


pop = pd.DataFrame(columns=['Zip Code','Population'])


row_data = [data.text for data in source]

temp_df = pd.DataFrame([row_data], columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])   

temp_df = temp_df[['Zip Code','Population']]   
pop = pop.append(temp_df).reset_index(drop=True)    
pop

代码中的一些事情:

  1. 上面的代码实际上不会循环任何内容。事实上,如果您尝试运行它,您应该会遇到大量错误。无法看到仅使用您提供的值循环相同值的输出。

  2. 缩进已关闭,

  3. 你引用一个变量source尚未定义。您引用一个变量cols这也没有定义。

  4. 您初始化一个数据框pop有 2 列,并尝试附加一个有 7 列的数据框。

各种各样的问题都在这里发生。

您是否考虑过直接使用 Pandas 来形成数据框?您仍然可以使用 BeautifulSoup,但 pandas 可以为您完成这项工作,而且您似乎需要更多地练习使用 BeautifulSoup 迭代元素(您实际上从未使用过.find or .find_all找到与您想要的表关联的标签。)

如果您需要 BeautifulSoup 方法来做到这一点,请告诉我,我也可以提供这种方法,但说实话,这比仅仅使用.read_html()这里有熊猫。

import pandas as pd

url = 'http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm'

tables = pd.read_html(url)

df = tables[11][1:]
df.columns = tables[11].iloc[0]

Output:

print (df)
0     # Zip Code      ...      People / Sq. Mile National Rank
1    1.    78705      ...               11008.66          #519
2    2.    78751      ...                5822.28        #1,374
3    3.    78752      ...                5435.92        #1,528
4    4.    78741      ...                5346.47        #1,562
5    5.    78723      ...                5175.95        #1,640
6    6.    78704      ...                5001.96        #1,713
7    7.    78758      ...                4954.80        #1,730
8    8.    78702      ...                4501.98        #2,015
9    9.    78757      ...                4380.92        #2,087
10  10.    78756      ...                4298.80        #2,139
11  11.    78745      ...                4063.22        #2,295
12  12.    78753      ...                3973.96        #2,350
13  13.    78703      ...                3491.54        #2,753
14  14.    78731      ...                3031.63        #3,167
15  15.    78759      ...                2998.68        #3,199
16  16.    78727      ...                2856.67        #3,371
17  17.    78749      ...                2795.02        #3,438
18  18.    78728      ...                2640.31        #3,614
19  19.    78721      ...                2568.43        #3,690
20  20.    78722      ...                2567.53        #3,692
21  21.    78729      ...                2366.94        #3,944
22  22.    78701      ...                2326.65        #3,995
23  23.    78748      ...                1961.73        #4,504
24  24.    78750      ...                1731.01        #4,870
25  25.    78744      ...                1464.78        #5,311
26  26.    78746      ...                1152.39        #5,971
27  27.    78717      ...                1081.05        #6,119
28  28.    78739      ...                 768.80        #7,006
29  29.    78734      ...                 698.96        #7,267
30  30.    78724      ...                 555.85        #7,870
31  31.    78726      ...                 543.24        #7,940
32  32.    78733      ...                 510.92        #8,116
33  33.    78754      ...                 484.73        #8,255
34  34.    78735      ...                 474.14        #8,318
35  35.    78732      ...                 416.13        #8,702
36  36.    78742      ...                 321.40        #9,467
37  37.    78730      ...                 257.86       #10,189
38  38.    78738      ...                 213.29       #10,829
39  39.    78747      ...                 194.02       #11,173
40  40.    78736      ...                 187.88       #11,301
41  41.    78737      ...                 143.90       #12,372
42  42.    78725      ...                 116.87       #13,282
43  43.    78719      ...                  93.88       #14,377

[43 rows x 7 columns]

与美丽汤

这不是执行此操作的理想方法。虽然这个网站非常简单table, tr, td标签。您可能想要的是首先获取所有行,然后迭代每一行以获取<td>标签。但你却抓住了所有<td>一口气标记。这仍然可以,但我们需要将其分成每一行。

我所做的就是将其分成 7 组,因为这就是有多少列。请注意,我做了一个巨大的假设,所有数据都在那里。如果不是,则表格将关闭或行、列将被移动。

import requests
import pandas as pd
import bs4


# Create a function called "chunks" with two arguments, l and n:
def chunks(l, n):
    # For item i in a range that is a length of l,
    for i in range(0, len(l), n):
        # Create an index range for l of n items:
        yield l[i:i+n]



pop_source = requests.get("http://zipatlas.com/us/tx/austin/zip-code-comparison/population-density.htm").text

soup = bs4.BeautifulSoup(pop_source, 'html5lib')


source = soup.find_all('td',class_ = 'report_data')

pop = pd.DataFrame(columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])

row_data = [data.text for data in source]

rows_data = list(chunks(row_data, 7))

for ele in rows_data:
    temp_df = pd.DataFrame([ele], columns=['#','Zip Code','Location','City', 'Population','People/Sq.Mile','National Rank'])
    pop = pop.append(temp_df).reset_index(drop=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeautifulSoup 表到数据框 的相关文章

随机推荐

  • TSQL:字符串错误的日期时间

    有一些与此相关的帖子 但我对 TSQL 很陌生 我无法理解它们 所以请原谅 我的程序有 BEGIN TRY INSERT INTO dbo myprocedure Mydate VALUES CONVERT DATETIME mydate
  • C# using 语句捕获错误

    我只是查看 using 语句 我一直知道它的作用 但直到现在还没有尝试使用它 我想出了以下代码 using SqlCommand cmd new SqlCommand reportDataSource new SqlConnection S
  • 调用远程ESB客户端错误

    我正在尝试从远程客户端发送和 esb 消息 但我不断收到此错误 org jboss soa esb listeners message MessageDeliverException org apache ws scout transpor
  • 如何使 Google Chrome 扩展示例正常工作?

    最近我决定编写一个非常简单的 Google Chrome 扩展 它要做的就是当用户按下扩展程序的按钮时 使用 JavaScript 从网页中隐藏一些 DOM 元素 由于我对 Chrome 扩展一无所知 所以我开始阅读教程 然后我发现了这个
  • 了解青春痘

    我不明白这个 DI容器 是如何使用的 官方网站上显示的示例没有告诉我任何信息 http pimple sensiolabs org http pimple sensiolabs org 基本上我有一个简单的站点 它由一组类组成 DB 类 C
  • Emacs:Tramp 不起作用

    我尝试通过 Emacs 通过 Tramp 打开远程文件 require tramp setq tramp default method ssh 我收到一条来自 Emacs 的消息 TRAMP 等待远程 shell 的提示 Emacs 挂起并
  • 如何从AVAudioEngine的installTap高频获取缓冲区

    我希望像 iOS 语音备忘录应用程序一样在屏幕上渲染音频波形 因此我使用 AVAudioEngine 并在输入节点上安装 Tap 但它以 0 1 秒的频率提供最快的回调 我需要以更快的频率获取缓冲区数据 以便可以在屏幕上绘制越来越多的波形
  • T4 FieldName 采用驼峰命名法,不带下划线?

    我正在使用 T4 生成一些类定义 并发现我的字段名称前面有一个下划线 我已经设定 code CamelCaseFields true 只是为了安全起见 尽管我知道这是默认设置 但最终仍然是 myField 而不是 myField 如何生成不
  • 将日志文件转换为 json?

    我有以下格式的日志文件 我需要使用 python 将日志文件转换为 json 文件 怎样才能制作出来呢 2015 07 13 00 03 05 976 hostname 1499918592344 UZA Anonymous Anonymo
  • 不带无参数 DbContext 和 DbContextFactory 构造函数的 Add-Migration

    我的应用程序没有无参数构造函数DbContext实现 我不喜欢提供无参数构造函数IDbContextFactory lt gt 执行 原因是我想控制 DbContext 指向的位置 这就是为什么我的所有构造函数都会请求 Connection
  • Unicode 转换为 ASCII 如何知道将 Ł 映射到 L

    我惊讶地发现没有 Unicode 规范化 字符将其映射为类似的东西L combining stroke 这是我理解原因的最佳解释 映射到L而不是 从支持 Unicode 的编码转换为 ASCII 或不具有 Unicode 功能的代码页时 特
  • C# 中的 ONVIF api 捕获图像

    我有一个 ONVIF 网络摄像机 我想从相机捕获图像 以便可以处理该图像并将其保存到文件系统 我发现有一个onvif api提供了一个方法GetSnapshotUri这应该为我提供图像快照 http www onvif org onvif
  • npm 错误! enoent ENOENT: 没有这样的文件或目录,打开 'C:\Users\...\package.json'

    我正在做一个关于 VueJS 的教程 我对此完全陌生 所以不太确定我在做什么 我按照所有说明进行操作 安装了所有软件包 这是我在 VSCode 终端中进行的检查 PS C Users Documents Vue Getting Starte
  • 使用 Thoughtbot Bourbon/Neat 重新排序列

    我正在寻找有关如何使用 Thoughtbot 的 Neat 网格框架在不同断点处重新排序 移动列位置的最佳解决方案 I would like to shift elements in my header from this in deskt
  • 将文件直接导入到 SVN 存储库,无需先签出

    我正在使用 SVN 并且在远程计算机上有一个存储库 有时 在本地计算机上工作时 我意识到需要向存储库添加一些新文件 我知道的通常程序是 在我本地计算机上的当前文件夹中签出整个 SVN 存储库 进入那里 将有趣的文件复制到此处 commit
  • 放弃 const of *this 是否会导致未定义的行为?

    以下代码可编译 看起来运行良好 但这会导致任何未定义的行为吗 我想抛弃 const this 这是为了允许const my iterator改变它指向的数据 Test class A public A const int x x x voi
  • 如何在C++中计算欧拉常数或欧拉幂?

    我正在尝试找到更 自然 的方式来使用该号码e在 C C 中 我专注于计算函数e n 我认为 cmath 默认情况下不提供对两者 函数和常量 的支持 但是 可以启用它来包含编译器定义的常量 在这种情况下 M E 这可以通过包含语句来完成 de
  • 基于开始和结束时间的一天中最活跃的时间

    我正在记录社区中玩家的统计数据 对于他们的在线状态和游戏内状态 我会在它们 开始 和 结束 时进行注册 为了显示一天中最活跃的一天和一小时 我想使用一个 SQL 语句来根据 开始 和 结束 日期时间值来测量最活跃的时刻 看着SQL 从数据库
  • 圆形页面指示器 - 如何更改填充颜色变化

    我在用着查看寻呼指示器 具体来说圆形页面指示器在我的 Android 应用程序中 要求是填色会直接移动到指示器的下一个圆圈 不会出现图中的情况 分页时圆圈移动缓慢 停留在中间 我怎样才能做到这一点 你可以在你的 xml 上试试这个
  • BeautifulSoup 表到数据框

    似乎无法将表中的值正确复制到数据框中 如果运行 raw data 它会输出所有值的列表 知道如何使其结构化吗 pop source requests get http zipatlas com us tx austin zip code c