CoderCastrov logo
CoderCastrov
Парсер

Как парсить веб-сайт с использованием Flask и Beautiful Soup

Как парсить веб-сайт с использованием Flask и Beautiful Soup
просмотров
1 мин чтение
#Парсер
Project Structure

Модуль парсера

Создайте файл с именем detik_scrapper.py. Здесь мы создаем модуль на языке Python для парсинга веб-сайта.

import requests
from bs4 import BeautifulSoup

def popular(**kwargs):
    html_doc = requests.get(kwargs['url'], params={kwargs['param']['key']: kwargs['param']['value']})
    soup = BeautifulSoup(html_doc.text, 'html.parser')
    popular_area = soup.find(attrs={'class': 'grid-row list-content'})
    titles = popular_area.findAll(attrs={'class': 'media__title'})
    images = popular_area.findAll(attrs={'class': 'media__image'})
    return images

Запуск приложения

Создайте файл с именем run.py. Здесь мы создаем маршрут для веб-сайта. Один маршрут для главной страницы, а второй - для страницы "detik-popular", на которой мы будем парсить популярные новости с веб-сайта detik.

from flask import Flask, render_template
from detik_scrapper import popular

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/detik-popular')
def detik_popular():
    url = 'https://www.detik.com/terpopuler'
    param = {
        'key': 'tag_from',
        'value': 'wp_cb_mostPopular_more'
    }
    popularNews = popular(param=param, url=url)
    return render_template('index.html', popular=popularNews)

if __name__ == "__main__":
    app.run(debug=True)

HTML-шаблон

Создайте файл с именем index.html в папке templates. Здесь мы показываем результаты популярных новостей с веб-сайта detik.

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</head>
<body>
  <nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <a class="navbar-brand" href="/">Scraper</a>
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="/detik-popular">Detik Popular</a>
      </li>
    </ul>
  </nav>
  <div class="container-fluid" style="margin-top: 30px;text-align: center;">
    <div>
      {% for image in popular %}
        {{ image|safe }}
        <a href="{{ image.find('a')['href']|safe }}">{{ image.find('a').find('img')['title']|safe }}</a>
      {% endfor %}
    </div>
  </div>
</body>
</html>
Result

Вы можете найти полный исходный код в репозитории ниже.

w4ndry/scraping-detik-dot-com

Парсинг веб-сайта detik с использованием Flask и Beautiful Soup - w4ndry/scraping-detik-dot-com

github