DevGang
Авторизоваться

Парсинг веб-сайтов с помощью pandas и Python с помощью всего нескольких строк кода.

Парсинг веб-сайтов не должен быть сложным, особенно если вы знаете Python. 

Динамические веб-сайты можно парсить с помощью таких библиотек, как Selenium и Scrapy. Простые веб-сайты можно парсить с помощью BeautifulSoup, а сверх простые сайты можно парсить только с помощью pandas.

И нам нужна всего одна или две строки кода, чтобы парсить сайты с pandas.

В этой статье мы собираемся собрать данные из Wikipedia.

Мы извлечем групповые таблицы с чемпионата мира по футболу FIFA 2022. Есть 8 таблиц от группы A до группы H, и мы получим из с помощью нескольких строк кода, используя pandas и Python. 

Первое, что необходимо сделать, установить библиотеки и зависимости. 

Первым делом мы установим библиотеки pandas и string.

pandas будут использоваться для извлечения данных, а модуль string поможет нам лучше организовать извлеченные данные. 

pip install pandas
pip install strings
Примечание: Для  веб-сканирования с pandas нам также необходимо установить некоторые зависимости, такие как lxml и html5lib (мы можем установить их с помощью pip).

Парсинг сайта (одной строчкой кода)

Простые веб-сайты, такие как Wikipedia, можно легко парсить с помощью одной или двух строк кода с помощью pandas.

Для этого мы сначала должны импортировать pandas. Затем мы должны использовать метод .read_html и в скобках указать веб-сайт, который мы хотим очистить.

import pandas as pd
all_tables = pd.read_html("https://en.wikipedia.org/wiki/2022_FIFA_World_Cup")

И это все. Теперь все страницы на сайте Wikipedia хранятся в списке all_tables.

Теперь нам нужно найти таблицы, которые принадлежат группам A, B, …H (всего 8 таблиц). Если мы пройдемся по элементам списка, то увидим, что первая, вторая и третья таблицы находятся в индексах 11, 18 и 25 соответственно.

all_tables[11]
all_tables[18]
all_tables[25]

Вот так выглядит таблица группы C (индекс 25).

Организация данных

Если мы пройдемся по индексам списка all_tables, мы обнаружим, что первая таблица имеет индекс 11, а следующие таблицы опережают на 7 индексов.

Мы можем связать все эти индексы с названием каждой группы, используя функцию zip.

for letter, i in zip(alphabet, range(11, 67, 7)):
    print(letter, i)

Вывод будет следующим:

A 11
B 18
C 25
D 32
E 39
F 46
G 53
H 60

Теперь мы знаем, что индекс 11 к группе A, а индекс 60 принадлежит к группе H.

Пришло время лучше организовать таблицы, извлеченные из словаря, чтобы нам больше не приходилось иметь дело с этими индексами. Мы также очистим фреймы данных, переименовав имя второго столбца «Teamvte» и удалив столбец «Qualification».

dict_tables = {}
for letter, i in zip(alphabet, range(11, 67, 7)):
    df = all_tables[i]
    df.rename(columns={df.columns[1]: 'Team'}, inplace=True)
    df.pop('Qualification')
    dict_tables[f'Group {letter}'] = df

Теперь у нас есть все таблицы, хранящиеся в словаре dict_tables. Давайте посмотрим 

>>> dict_tables.keys()
dict_keys(['Group A', 'Group B', 'Group C', 'Group D', 'Group E', 'Group F', 'Group G', 'Group H'])

Мы можем получить таблицу любой группы, указав ее ключ. Вот как мы это сделаем для группы H.

dict_tables['Group H']

Так выглядит наш результат.

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


import pandas as pd
from string import ascii_uppercase as alphabet

all_tables = pd.read_html("https://en.wikipedia.org/wiki/2022_FIFA_World_Cup")

dict_tables = {}
for letter, i in zip(alphabet, range(11, 67, 7)):
    df = all_tables[i]
    df.rename(columns={df.columns[1]: 'Team'}, inplace=True)
    df.pop('Qualification')
    dict_tables[f'Group {letter}'] = df
    
# show all the keys
print(dict_tables.keys())

# show table of Group H
dict_tables['Group H']
#Python #Pandas
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить