Python как l oop через группу списков, чтобы получить указанные c индексы списков - PullRequest
0 голосов
/ 30 марта 2020

Я новичок ie. Я изучаю утилизацию, поэтому решил удалить некоторые данные о коронавирусе. Я хочу получить название каждой страны и зарегистрированных случаев, который является индексом 0 и 1 в каждом списке. Как сделать, чтобы я oop, чтобы получить это. Я прочитал, что могу использовать Selenium для автоматизации данных, которые я могу сделать с некоторой помощью по этому вопросу. спасибо

import requests
import bs4 as BeautifulSoup
url = 'https://www.worldometers.info/coronavirus/'
page = requests.get(url)
page.raise_for_status()
soup = BeautifulSoup.BeautifulSoup(page.text,'html.parser')
table = soup.find('div', class_='main_table_countries_div')
data = table.find_all('tr')
row_list = list()
for tr in data:
   td = tr.find_all('td')
   row = [i.text for i in td]
   row_list.append(row)

for a in row_list:
   country_data = a
   print(country_data)

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Один из списков пуст, что вызывает ошибку при попытке его проиндексировать:

import requests
import bs4 as BeautifulSoup
url = 'https://www.worldometers.info/coronavirus/'
page = requests.get(url)
page.raise_for_status()
soup = BeautifulSoup.BeautifulSoup(page.text,'html.parser')
table = soup.find('div', class_='main_table_countries_div')
data = table.find_all('tr')
row_list = list()
for tr in data:
   td = tr.find_all('td')
   row = [i.text for i in td]
   row_list.append(row)

# this is erroring out because the first list is empty
print(row_list[0])
for a in row_list[1:]:
   country_data = a
   # then you can access them by index
   print(country_data[0])
   print(country_data[1])

Стоит отметить, что вы заново изобретаете колесо. Если вы делаете это с целью изучения, ура, если нет, взгляните на библиотеку pandas для управления кадрами данных.

0 голосов
/ 30 марта 2020

Вы очень близки, единственное, что вам нужно сделать в дополнение к тому, что вы сделали, это извлечь название страны и количество сообщений.

Ваш row_list - это список каждой строки в таблице, поэтому Вы можете просто сделать:

country = []
reported = []
for a in row_list:
    if len(a) > 1:
        country.append(a[0])
        reported.append(a[1])

Я добавил проверку для len(a) > 1, потому что я думаю, что первая строка в row_list пуста. Тогда country и reported будут списком стран и сообщенным счетчиком для каждой страны в том же порядке.

for c, r in zip(country ,reported):
    print("{}: {}".format(c, r))


USA: 159,689
Italy: 101,739
Spain: 85,195
Germany: 66,125
France: 44,550
Iran: 41,495
UK: 22,141
Switzerland: 15,760
Belgium: 11,899
Netherlands: 11,750
Turkey: 10,827
S. Korea: 9,661
Austria: 9,597
Canada: 7,297
Portugal: 6,408
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...