Парсер для django записей
Написал парсер, который берет данные фильма с сайта megogo:
def get_trailer(link):
source = requests.get(link).text
soup = bs4.BeautifulSoup(source, 'html.parser')
parser_title = soup.find('h1', {'class': 'video-title'}).text.strip()
parser_descriptions = soup.findAll('div', {'class': 'show-more'})
parser_description = []
for desc in parser_descriptions:
for i in desc.findAll('p'):
parser_description.append(str(i))
parser_genres = soup.findAll('a', {'class': 'video-genre'})
g = []
for genre in parser_genres:
g.append(genre.text)
parser_country = soup.find('a', {'class': 'video-country'}).text
parser_poster = soup.find('div', {'class': 'thumb'})
for image in parser_poster:
if isinstance(image, bs4.Tag):
image['src']
parser_year = soup.find('span', {'class': 'video-year'}).text
parser_running_time = soup.find('span', {'itemprop': 'duration'}).text
parser_age_rating = soup.find('span', {'class': 'video-age'}).text
parser_quality = soup.find('span', {'class': 'video-quality'}).text
parser_url = soup.find('div', {'class': 'video-title-original'}).text.strip()
parser_url_list = parser_url.split()
parser_slug = '_'.join(parser_url_list)
Как мне правильно вызвать функцию в методе save, что бы заполнить поля по типу self.title = parser_title?
models.py:
class Trailer(models.Model):
megogo_url = models.URLField('Ссылка на фильм megogo')
title = models.CharField(max_length=100, blank=True)
description = models.TextField(max_length=1500, blank=True)
genre = models.ManyToManyField(Genre, verbose_name='Жанры', blank=True)
country = models.ManyToManyField(Country, verbose_name='Страны', blank=True)
poster = models.URLField(blank=True)
year = models.SmallIntegerField(blank=True)
running_time = models.CharField(max_length=4, blank=True)
age_rating = models.CharField(max_length=3, blank=True)
quality = models.CharField(max_length=10, blank=True)
url = models.SlugField(unique=True, blank=True)
def save(self, *args, **kwargs):
get_trailer(self.megogo_url)
То есть, могу ли обращаться к локальным переменным функции?
Или прописать логику парсера в методе save? Насколько это будет правильно?:
def save(self, *args, **kwargs):
source = requests.get(self.megogo_url).text
soup = bs4.BeautifulSoup(source, 'html.parser')
self.title = soup.find('h1', {'class': 'video-title'}).text.strip()
return super(Trailer, self).save(*args, **kwargs)