Как получить по названию города его население?

Есть текстовый файл со списком городов в каждой строке:

Абаза
Абакан
Абдулино
Абинск
Агидель
...

Он был спарсен со страницы ru.wikipedia.org/wiki/Список_городов_России.

Порядок городов тот же, что и на странице. Как мне получить население каждого города?

Я читаю файл построчно, а дальше?

with open('C:\\cities.txt', 'r',encoding="utf8") as f:
    nums = f.read().splitlines()

Ответы (1 шт):

Автор решения: Vitalizzare ушел в монастырь

Подобный случай успешно решается с помощью pandas.read_html. Результатом работы этой функции будет список из таблиц, найденных на странице. Википедия в целом хорошо организована, нужную таблицу легко найти. В вашем случае значимыми будут первые две из этого списка, где первая - основная с самостоятельными городами, а вторая - города в составе городов федерального значения (они не рассматриваются как самостоятельные и их нет в первой таблице).

При чистке нужно будет учесть, что население городов указано с пробелом как разделителем групп разрядов, а некоторые числа сопровождаются сноской в квадратных скобках, например "13 010 112[2]".

import pandas as pd

href = r'https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8'
data = pd.read_html(href)

df_main = data[0].copy()
df_main.columns = ['index', 'crest', 'city', 'region', 'district', 'population', 'antiquity', 'status', 'former_names']
df_main = df_main.set_index('index').drop('crest', axis=1)
df_main['population'] = (
    df_main['population']
    .str.replace(' ', '')
    .str.split('[').str[0]
    .astype(int)
)
print(df_main.sort_values('population', ascending=False)[['city', 'population']].head())
                  city  population
index                             
608             Москва    13010112
832    Санкт-Петербург     5601911
677        Новосибирск     1633595
278       Екатеринбург     1544376
355             Казань     1308660

С таблицей data[1], содержащей города в составе городов федерального значения, работаете похожим образом. Различие между ними - в названии четвертого поля (для первой это "Регион", для второй - "ГФЗ"). Если вы унифицируете название этого поля и добавите для страховки дополнительное поле, указывающее номер таблицы, то обе можно без опаски объединить в одну таблицу методом pandas.concat. Перед анализом нужно ознакомиться со сносками на странице, чтобы понимать, как население федеральных городов соотносится с населением подчиненных из второй таблицы.

→ Ссылка