Как очистить тело из разборной таблицы с помощью библиотеки BeautifulSoup? - PullRequest
0 голосов
/ 02 августа 2020

Недавно я сделал проект, основанный на дашборде covid-19. Где я использую для удаления данных с этого веб-сайта , у которого есть сворачиваемая таблица. До сих пор все было нормально, теперь недавно приложение heroku показало некоторые ошибки. Поэтому я повторно запускаю свой код на своем локальном компьютере, и при очистке tbody возникла ошибка. Затем я понял, что сайт , который я использую для очистки данных, изменил или обновил свой внешний вид (таблица), а затем мой код не может его захватить. Я попытался просмотреть источник страницы , и я не могу найти таблицу (tbody), которая находится на этой странице . Но я могу найти tbody и все данные, если я проверю строку таблицы, но не могу найти ее в исходном коде страницы.Как теперь удалить таблицу? Мой код: код jupyter Стол, который я должен взять: веб-сайт я сканирую

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Данные, которые вы видите на странице, загружаются с внешнего URL-адреса через Ajax. Вы можете использовать модуль requests / json для его загрузки:

import json
import requests


url = 'https://www.mohfw.gov.in/data/datanew.json'
data = requests.get(url).json()

# uncomment to print all data:
# print(json.dumps(data, indent=4))

# print some data on screen:
for d in data:
    print('{:<30} {:<10} {:<10} {:<10} {:<10}'.format(d['state_name'], d['active'], d['positive'], d['cured'], d['death']))

Выводит:

Andaman and Nicobar Islands    329        548        214        5         
Andhra Pradesh                 75720      140933     63864      1349      
Arunachal Pradesh              670        1591       918        3         
Assam                          9814       40269      30357      98        
Bihar                          17579      51233      33358      296       
Chandigarh                     369        1051       667        15        
Chhattisgarh                   2803       9086       6230       53        

... and so on.
0 голосов
/ 02 августа 2020

Попробуйте:

import json
import requests
import pandas as pd
data = []
row = []
r = requests.get('https://www.mohfw.gov.in/data/datanew.json')
j = json.loads(r.text)
for i in j:
    for k in i:
        row.append(i[k])
    data.append(row)
    row = []
columns = [i for i in j[0]]

df = pd.DataFrame(data, columns=columns)
df.sno = pd.to_numeric(df.sno, errors='coerce').reset_index()
df = df.sort_values('sno',)
print(df.to_string())

распечатает:

    sno                                state_name  active positive    cured  death new_active new_positive new_cured new_death state_code
0     0               Andaman and Nicobar Islands     329      548      214      5        403          636       226         7         35
1     1                            Andhra Pradesh   75720   140933    63864   1349      72188       150209     76614      1407         28
2     2                         Arunachal Pradesh     670     1591      918      3        701         1673       969         3         12
3     3                                     Assam    9814    40269    30357     98      10183        41726     31442       101         18
4     4                                     Bihar   17579    51233    33358    296      18937        54240     34994       309         10
5     5                                Chandigarh     369     1051      667     15        378         1079       683        18         04
6     6                              Chhattisgarh    2803     9086     6230     53       2720         9385      6610        55         22
7     7  Dadra and Nagar Haveli and Daman and Diu     412     1100      686      2        418         1145       725         2         26
8     8                                     Delhi   10705   135598   120930   3963      10596       136716    122131      3989         07
9     9                                       Goa    1657     5913     4211     45       1707         6193      4438        48         30
10   10                                   Gujarat   14090    61438    44907   2441      14300        62463     45699      2464         24

и так далее ...

...