Парсер
Как парсить веб-сайт с использованием Flask и Beautiful Soup
Модуль парсера
Создайте файл с именем 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>
Вы можете найти полный исходный код в репозитории ниже.