Если у вас есть <table>
теги, просто go с pandas '.read_html()
. Он использует BeautifulSoup под капотом, тогда вы можете просто нарезать и нарезать кубик данных, как вам угодно:
import pandas as pd
url='https://www.worldometers.info/coronavirus/'
df = pd.read_html(url)[0]
print (df.iloc[:,:2])
Чтобы сделать это с BeautifulSoup прямо вперед. Сначала вы хотите получить тег <table>
. В теге <table>
получите все теги <tr>
(строки). Затем выполните итерацию по каждой строке, чтобы получить все теги <td>
(данные). Данные, которые вы хотите, находятся в индексных позициях 0 и 1, поэтому просто распечатайте их.
import requests
from bs4 import BeautifulSoup
url='https://www.worldometers.info/coronavirus/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
table = soup.find('table',{'id':'main_table_countries'})
rows = table.find_all('tr')
for row in rows:
data = row.find_all('td')
if data != []:
print (data[0].text, data[1].text)
ДОПОЛНИТЕЛЬНО:
import pandas as pd
country = 'China'
url='https://www.worldometers.info/coronavirus/'
df = pd.read_html(url)[0]
print (df[df['Country,Other'] == country].iloc[:,:2])
ИЛИ
import requests
from bs4 import BeautifulSoup
import re
country = 'China'
url='https://www.worldometers.info/coronavirus/'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
table = soup.find('table',{'id':'main_table_countries'})
rows = table.find('a', text=re.compile(country))
for row in rows:
data = row.parent.parent.parent.find_all('td')[1].text
print (row, data)