尝试从此处抓取COVID案件: 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
但是我认为她是一名开发人员,她的技能超出了我的水平。必须有一种更简单的方法来执行此操作。对吧?
谢谢。
答案 0 :(得分:0)
是的,这里还有更好的方法。数据作为json响应返回。只需提取json,然后使用熊猫对其进行标准化。
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
(Dev Tools)。然后,您要在网络-> XHR中搜索。如果为空/空白,则可能需要刷新/重新加载页面。
然后,您需要搜索/调查以查看所需数据是否存在。在这种情况下,我确实在那找到了它(如您在突出显示部分中看到的那样:
找到后,您可以转到Headers
查找获取数据所需的相关信息/参数。
对于其他站点,此方法可能/将有所不同,其中一些比此更为复杂,并且某些站点根本无法工作。但这是通用方法。