Webscraping данных из складной таблицы, возвращающей пустой кадр - PullRequest
0 голосов
/ 06 апреля 2020

Попытка очистить случаи 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"})

Я понимаю, мне нужно пройти через l oop, чтобы получить информация для каждого штата, но мне нужна помощь, чтобы заставить работать код basi c. Это моя первая попытка webscraping; Я почти уверен, что использую неправильные теги или аргументы findAll. Я пробовал пару различных комбинаций, и ни одна из них не работает.

Я нашел здесь женщину, которая сделала нечто похожее на то, что я хочу: https://towardsdatascience.com/scrape-cdc-for-covid-19-cases-a162924073ad

Но я думаю, что она разработчик, и ее навыки выше моих. Там должен быть гораздо более простой способ сделать это. Правильно?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 апреля 2020

Да, есть намного лучший способ здесь. данные возвращаются как ответ 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

Чтобы найти это (это не всегда так), но вы хотите go на сайт, и право нажмите и откройте Inspect (Dev Tools). Затем вы хотите искать в сети -> XHR. Если оно пустое / пустое, вам может потребоваться обновить / перезагрузить страницу.

Затем вам нужно выполнить поиск / расследование, чтобы выяснить, есть ли нужные вам данные. Что в этом случае я нашел там (как вы можете видеть в выделенной части:

enter image description here

Как только вы найдете это, вы можете go до Headers для поиска соответствующей информации / параметров, которые вам понадобятся для извлечения данных.

enter image description here

Это может / будет отличаться для других сайты, некоторые более сложные, чем некоторые, и некоторые сайты вообще не будут работать, но это общий метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...