从可折叠表返回空帧的Webscraping数据

2024-04-26 17:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

试图从这里清除新冠病毒病例: https://www.cdc.gov/coronavirus/2019-ncov/cases-updates/cases-in-us.html

如果单击地图下方“状态”旁边的“+”,您将看到每个状态的案例数。我希望每个州都有这样的数据帧

Alabama         1841
Alaska          185
American Samoa  0

在我的尝试中,容器是空的

my_url = 'https://www.cdc.gov/coronavirus/2019-ncov/cases-updates/cases-in-us.html'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div", {"class" : "rt-td"})

我知道我需要循环获取每个州的信息,但我需要帮助基本代码正常工作。这是我第一次尝试拉网;我很确定我使用了错误的标记或findAll参数。我尝试了几种不同的组合,但都没有效果

我发现一位女士做了一件和我想做的相似的事: https://towardsdatascience.com/scrape-cdc-for-covid-19-cases-a162924073ad

但我认为她是一名开发人员,她的技能高于我。必须有一种更简单的方法来实现这一点。对吧?

提前谢谢


Tags: inhttps状态htmlwwwpagegovus
1条回答
网友
1楼 · 发布于 2024-04-26 17:38:03

是的,这里有更好的方法。数据作为json响应返回。只需拉取json,然后使用pandas对其进行规范化

import requests
from pandas.io.json import json_normalize

url="https://www.cdc.gov/coronavirus/2019-ncov/map-cases-us.json"
jsonData = requests.get(url).json()

df = json_normalize(jsonData['data'])
df = df[['Jurisdiction', 'Cases Reported']].dropna()

输出:

print(df)
            Jurisdiction  Cases Reported
0                Alabama          1841.0
1                 Alaska           185.0
2         American Samoa             0.0
3                Arizona          2269.0
4               Arkansas           853.0
5             California         13438.0
6               Colorado          4950.0
7            Connecticut          5675.0
8               Delaware           673.0
9   District of Columbia           998.0
10               Florida         11961.0
11               Georgia          6752.0
12                  Guam           110.0
13                Hawaii           324.0
14                 Idaho          1101.0
15              Illinois         11256.0
16               Indiana          4411.0
17                  Iowa           868.0
18                Kansas           813.0
19              Kentucky           955.0
20             Louisiana         13010.0
21                 Maine           470.0
22      Marshall Islands             0.0
23              Maryland          4045.0
24         Massachusetts         12500.0
25              Michigan         15718.0
26            Micronesia             0.0
27             Minnesota           986.0
28           Mississippi          1738.0
29              Missouri          2367.0
30               Montana           300.0
31              Nebraska           367.0
32                Nevada          1836.0
33         New Hampshire           669.0
34            New Jersey         37505.0
35            New Mexico           624.0
36              New York        119435.0
37        North Carolina          2870.0
38          North Dakota           207.0
39     Northern Marianas             8.0
40                  Ohio          4043.0
41              Oklahoma          1250.0
42                Oregon          1068.0
43                 Palau             0.0
44          Pennsylvania         11510.0
45           Puerto Rico           475.0
46          Rhode Island           922.0
47        South Carolina          2049.0
48          South Dakota           240.0
49             Tennessee          3633.0
50                 Texas          6812.0
51                  Utah          1605.0
52               Vermont           512.0
53        Virgin Islands            42.0
54              Virginia          2878.0
55            Washington          6973.0
56         West Virginia           324.0
57             Wisconsin          2267.0
58               Wyoming           200.0

要找到它(情况并非总是如此),但您需要转到该站点,右键单击并打开Inspect(开发工具)。然后您要在网络中搜索->;XHR。如果为空/空白,则可能需要刷新/重新加载页面

然后,您需要搜索/调查以查看您想要的数据是否存在。在本例中,我确实在那里找到了它(如突出显示部分所示:

enter image description here

找到它后,您可以转到Headers查找获取数据所需的相关信息/参数

enter image description here

对于其他网站来说,这可能会有所不同,有些网站比这更复杂,有些网站根本不起作用。但这是一般的方法

相关问题 更多 >