Рубрики
Без рубрики

Python3 Challenge: Распутающий веб-соскоб

Как добавить динамические данные с разных страниц на веб-сайте эффективно! Это проблема … Tagged с Django, Craping, Challenge, Python.

Как добавить динамические данные с разных страниц на веб-сайте эффективно!

Это задача, которая была запрошена в реальном собеседовании, цель этой статьи – показать технологии, связанные и узнали во время вызова. Требуется предварительное знание структуры Django.

Вызов

Разработана страница Django, которая автоматически представляет запрошенную информацию и всегда в курсе, и эта страница представляет собой оперативно обновленные номера.

  1. Предполагаемая популяция городов Натал/РН и Моссормо/рН.
  2. Сумма популяций городов.
  3. Муниципальный индекс человека развития (MHDI) городов Натал/РН и Моссор/рН.
  4. Среднее для Натал и Моссорё МХДИС.

Все это в соответствии с данными на странице

Уклон

Язык 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”