CoderCastrov logo
CoderCastrov
Парсер

Парсинг логотипов регионов Индонезии с Википедии

Парсинг логотипов регионов Индонезии с Википедии
просмотров
2 мин чтение
#Парсер

Изучаем парсинг веб-сайтов с помощью Python

wikipedia

Отказ от ответственности: Эта статья создана в образовательных целях.

Итак, проблема заключается в отсутствии доступных ресурсов для получения данных о всех регионах Индонезии вместе с их логотипами.

Если речь идет только о данных о регионах, то, вероятно, их много. Я сам использую проект от Laravolt здесь. Но так как пока нет данных о логотипах для каждого региона (округа и провинции), я попытался найти другие ресурсы, которые можно было бы добавить в базу данных.

И я нашел CDN от btekno.id, пример которого выглядит так: https://cdn.btekno.id/assets/logo/3172.png

Сначала я попробовал вручную скрапить каждый URL. Но этот способ очень неэффективен, так как нам придется делать множество запросов к этому CDN. Кроме того, расширение каждого логотипа может отличаться, например, png, jpg, jpeg или даже gif. И, кроме того, оказалось, что данные некорректны, перепутаны и не полны.

Поскольку требования проекта требуют наличия самого свежего и полного логотипа для каждого региона, единственным самым обновленным и полным источником логотипов является Википедия, приведенная ниже.

Список гербов округов и городов Индонезии — Википедия, свободная энциклопедия

Вот список гербов округов и городов Индонезии. В Индонезии есть 416 округов и 98 городов...

id.wikipedia.org

Таким образом, я решил собрать информацию с веб-сайта Википедии. Процесс довольно прост. Я просто следую руководству от freecodecamp и вношу некоторые изменения, чтобы адаптировать его к веб-сайту, который я хочу спарсить.

Вот код для сбора ссылок на изображения:

# спарсить все ссылки на изображения с этой страницы https://id.wikipedia.org/wiki/Daftar_lambang_kabupaten_dan_kota_di_Indonesia
# и сохранить их в json-файле

import requests
from bs4 import BeautifulSoup
import json

url = 'https://id.wikipedia.org/wiki/Daftar_lambang_kabupaten_dan_kota_di_Indonesia'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

# получить ссылки на изображения
image_links = []
for img in soup.find_all('img'):
    image_links.append(img['src'])

# получить названия изображений
image_names = []
for img in soup.find_all('img'):
    image_names.append(img['alt'])

# сохранить в json-файле, где каждое название изображения является ключом, а ссылка на изображение - значением
data = {}
for i in range(len(image_links)):
    data[image_names[i]] = image_links[i]

# сохранить в json-файл
with open('image_links.json', 'w') as f:
    json.dump(data, f)

# вывести в консоль
print(data)

После получения результатов парсинга с помощью этого кода, все еще требуется некоторая доработка. Поскольку этот код собирает все теги <img>, находящиеся на странице, он также собирает логотип Википедии.

Чтобы запустить этот код, достаточно просто. Сначала установите необходимые библиотеки с помощью pip.

pip install requests
pip install beautifulsoup4

Затем просто запустите:

python3 {имяфайла}.py

Тогда результаты парсинга будут автоматически сохранены в файле image_links.json.

Если у вас есть запрос на получение результата в виде базы данных после использования данных о районах от Laravolt, плюс ссылки на логотипы районов, которые я уже спарсил, пожалуйста, напишите в комментариях.

Вот и все.

Надеюсь, это будет полезно.


Ссылки:

Как парсить статьи с Википедии с помощью Python

В этой статье я создам парсер веб-страниц на Python, который будет парсить страницы Википедии. Парсер будет переходить на...