Как соскрести ведро и тело со стола, используя Python - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь собрать данные с сайта, который отслеживает случаи заражения коронным вирусом. Веб-сайт "https://www.coronatracker.com/"

Таблица, которую я пытаюсь очистить, выглядит так: Таблица записей короны

Если мы посмотрим на это элемент html, в нем есть элемент table, содержащий thead и tbody. Я пытаюсь прочитать всю таблицу, но моя попытка привела к чтению только заголовков. Я также хочу прочитать содержание таблицы.

Вот код, который я написал, и надеялся, что смогу прочитать таблицу:

import requests
from bs4 import BeautifulSoup

url = "https://www.coronatracker.com/"

html_page = requests.get(url)

soup = BeautifulSoup(html_page.text, 'html.parser')

#pointing to div that is parent to table    
data = soup.find('div' , {'class':'w-full block md:hidden mt-4 mb-8'})

#pointing to table
tables = data.find_all('table' , {'class':'table-auto w-full'})

#printing out the headings
for table in tables:
    print(table.text)

#printing out the contents
body = table.find('tbody')
for data in body.find_all('tr'):
    print(data)

Проблема с чтением содержимого таблицы, заголовки читаются отлично.

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Интересующий вас табличный контент генерируется динамически. Однако вы можете использовать эту ссылку для извлечения и обработки содержимого с использованием xhr.

Вот как вы можете:

import requests
import pandas as pd

URL = "https://api.coronatracker.com/v3/stats/worldometer/topCountry?limit=15&sort=-confirmed"

df = pd.DataFrame(columns=['country','confirmed','recovered','deaths'])

res = requests.get(URL,headers={'User-Agent':'Mozilla/5.0'})
for item in res.json():
    country = item['country']
    confirmed = item['totalConfirmed']
    recovered = item['totalRecovered']
    deaths = item['totalDeaths']
    df = df.append({'country':country,'confirmed':confirmed,'recovered':recovered,'deaths':deaths},ignore_index=True)

print(df)

Вывод:

    country confirmed recovered deaths
0       USA   1170184    162653  68002
1     Spain    247122    148558  25264
2     Italy    210717     81654  28884
3        UK    186599       135  28446
4    France    168396     50562  24760
5   Germany    165183    130600   6812
6    Russia    134687     16639   1280
7    Turkey    126045     63151   3397
8      Iran     97424     78422   6203
9    Brazil     97100     40937   6761
10    China     82877     77713   4633
11   Canada     57148     24416   3606
12  Belgium     49906     12309   7844
13     Peru     42534     12434   1200
14    India     42490     11775   1391
0 голосов
/ 03 мая 2020
From bs4 import beautifulsoup 
Import request 
Dataaa=request.get(url)
Scrapped=beautifulsoup(Dataa.text,html.parse)
Tbody= Scrapped.find('tbody'
Or
r = requests.get(url)
bs = BeautifulSoup(r.text)
info = bs.findALL('tr','td')    r = requests.get(url)
bs = BeautifulSoup(r.text)
info = bs.findALL('tr','td')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...