Как добавить динамические данные с разных страниц на веб-сайте эффективно!
Это задача, которая была запрошена в реальном собеседовании, цель этой статьи – показать технологии, связанные и узнали во время вызова. Требуется предварительное знание структуры Django.
Вызов
Разработана страница Django, которая автоматически представляет запрошенную информацию и всегда в курсе, и эта страница представляет собой оперативно обновленные номера.
- Предполагаемая популяция городов Натал/РН и Моссормо/рН.
- Сумма популяций городов.
- Муниципальный индекс человека развития (MHDI) городов Натал/РН и Моссор/рН.
- Среднее для Натал и Моссорё МХДИС.
Все это в соответствии с данными на странице
Уклон
Язык Python много выделяется в коллекции данных в Интернете. Мы будем использовать ** красивый суп ** модуль, который создает дерево из HTML и XML-документов, проанализированных на странице.
Начальный проект
Поскольку вы уже создали проект Django и уже активировали свой виртуаль (Советую вам использовать его) Отказ
Давайте использовать BS4 от Красивый суп Мы должны установить библиотеку в проекте, через пипс :
(venv) ❯ pip install bs4
HTML
Учитывая, что вы уже создали Шаблоны Папка в приложении, ваша структура будет соответствовать более или менее этому подальше:
Структура файлов Django и папок
Теперь создал HTML-страницу, в моем случае index.html, чтобы показать контент.
Просмотр Roam Index.html на Github
Веб-соскоб
У каждого сайта есть структура, поэтому проверьте область, которую вы хотите захватить и анализировать, идут мысль каждый Ли Внутри UL в классе «Результатдос-падрао» :
В Виды Мы начнем, импортируя использование инструментов и переменных, размещение городов и их соответствующих полей:
from django.shortcuts import render import re import requests, json, locale from bs4 import BeautifulSoup def index(request): city = [ {'state': 'rn', 'name': 'natal'}, {'state': 'rn', 'name': 'mossoro'} ] fields = [ 'População', 'IDHM' ] city_values = [] context = {} return render(request, 'ibge/index.html', context)
В функции CityData CityData перейдите в вариабе города в качестве параметра, прокручивая по имени и состоянию, вызовите страницы по параметру URL через города, после захвата меток и значений страницы.
Если выбранные поля такие же, как те, которые запрашивали, сохраните их в массивах после возврата City_data.
def cityData(city): city_data = [] for item in city: # convert and read in json item = json.dumps(item) item = json.loads(item) name = item['name'] state = item['state'] url_request = requests.get("https://www.ibge.gov.br/cidades-e-estados/"+ state +"/"+ name +".html") div_select = BeautifulSoup(url_request.content, 'html.parser') ul = div_select.find(class_='resultados-padrao') city_label = ul.findAll("p", {"class": "ind-label"}) city_value = ul.findAll("p", {"class": "ind-value"}) data = [] for label, value in zip(city_label, city_value): text_label = label.text text_value = value.text if text_label.split()[0] == fields[0] or text_label.split()[0] == fields[1]: data.append([text_label, text_value]) city_values.append(text_value.split()[0]) data.append([name, state]) city_data.append(data) return city_data
В заключение, ожидаемый результат от Виды это:
Просмотр Roam Views.py на Github
Вывод
После этого мы закончили. Используйте эту команду для запуска веб-приложения:
(venv) ❯ python manage.py runserver
Страница рендеринга данных Ibge.
В этом руководстве мы использовали Python, Django и красивый суп для сбора данных. Теперь у вас есть большие возможности для развития.
Репозиторий проекта на Github
Я надеюсь, что вам понравилось контент! Если у вас есть предложения и/или критика, комментируйте ниже. Пока! 🖐🏽.
Оригинал: “https://dev.to/jonathanccardoso/python3-challenge-unraveling-web-scraping-4fjg”