Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from bs4 import BeautifulSoup as bs
- import requests
- class RtNewsAnimalParser:
- headers = {'Accept': '*/*',
- 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0'}
- base_url = 'https://russian.rt.com'
- session = requests.Session()
- def rt_news_animal(self):
- '''
- Эта функция парсит https://russian.rt.com/tag/zhivotnye
- all_list_news = последние 15 новостей
- url_new = ссылка на конкретную новость
- heading= заголовок статьи
- main_text= основной текст находящийся на странице статьи
- url_media= принимает в значение картинки, видео(может быть как mp4 так и с youtube)
- time_post = время публикации статьи
- description_news= краткое описание статьи , которое находится как в статье ,
- так и в ее кратном описании на общей странице статей
- galery_media = при наличии в статье нескольких фотографий, вместо url_media
- принимаются все фотографии в galery_media
- :return:
- '''
- tag_zhivotnie = self.base_url + '/tag/zhivotnye'
- session = requests.Session()
- request = session.get(tag_zhivotnie, headers=self.headers)
- soup = bs(request.content, 'html.parser')
- all_list_news = soup.find_all('div', 'card__heading_all-new')
- novosti = []
- for list_news in all_list_news:
- list_news_description = list_news.text.strip()
- url_news = list_news('a', 'link_color')
- for url_new in url_news:
- news_element = self.parse_new_url(url_new, list_news_description)
- novosti.append(news_element)
- return novosti
- def parse_new_url(self, url_new, list_news_description):
- '''
- Получить информацию об отдельной новости
- :param url_new: Ссылка на новость
- :param url_new: Описание новости
- :return:
- '''
- url_new = self.base_url + url_new['href']
- request_url_new = self.session.get(url_new, headers=self.headers)
- soup_url_new = bs(request_url_new.content, 'html.parser')
- heading = soup_url_new.find('div', 'article__summary').text
- time_post = soup_url_new.find('time', 'date')['datetime']
- # 'description_news': list_news.text.strip() не работает
- set_news = {'url_news': url_new,
- 'description_news': list_news_description,
- 'heading': heading.strip(),
- 'time_post': time_post}
- set_news.update(self.add_main_text(soup_url_new))
- set_news.update(self.add_url_media(soup_url_new))
- set_news.update(self.add_gallery_media(soup_url_new))
- return set_news
- def add_main_text(self, html):
- main_text = html.find('div', 'article__text')
- if main_text is not None:
- main_text_find_all = main_text.find_all('p')
- full_text = ''
- for main_text_p in main_text_find_all:
- full_text += main_text_p.text
- return{'main_text': full_text}
- def add_url_media(self, html):
- time_post = html.find('time', 'date')['datetime']
- optimal_date = time_post.split('-')[0] + '.' + time_post.split('-')[1]
- url_media = html.find('img', 'article__cover-image')
- mediaplayer_mp4 = html.find('div', 'mediaplayer')
- mediaplayer_you_tube = html.find_all('div', 'slide')
- if url_media is not None:
- return {'url_media': url_media['src']}
- if mediaplayer_mp4 is not None:
- url_media = mediaplayer_mp4.find('div').attrs['id']
- kod_video = url_media.split('-')[-1]
- url_media_new = 'https://cdnv.rt.com/russian/video/' + optimal_date + "/" + kod_video + '.mp4'
- return {'url_media': url_media_new}
- if mediaplayer_you_tube is []:
- url_media = html.find('iframe', 'cover__video')
- if url_media is not None:
- you_tube_url = 'https:' + url_media['src']
- return {'url_media': you_tube_url}
- def add_gallery_media(self, html):
- galery_media = html.find_all('div', 'slide')
- if galery_media is []:
- print(galery_media)
- summ_gallery = []
- for gallery in galery_media:
- summ_gallery += {str(gallery['data-src'] + ' ')}
- return {'gallery_img': summ_gallery}
Add Comment
Please, Sign In to add comment