123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # Parser Vedabase
- from bs4 import BeautifulSoup as bs
- import bs4
- import requests
- import time
- def __get_soup(url) -> bs4.BeautifulSoup:
- '''Returns soup from site page'''
- while True: # повтор запроса к странице после ожидания, если сервер закрыает соединение
- try:
- r = requests.get(url)
- except requests.exceptions.RequestException:
- time.sleep(30)
- else:
- break
- r.encoding = 'utf-8'
- return bs(r.text, 'html.parser')
- def __construct_link(query: str) -> dict:
- basic_url = 'https://vedabase.io'
- books = ['bg', 'sb']
- try:
- book_name, verse_number = query.split(" ")
- except ValueError:
- return {"error": "Не правильный формат указания стиха"}
- if book_name not in books:
- return {"error": "Книга указана не правильно. Введите одно из\
- bg, sb"}
- return {
- "link": basic_url + f"/ru/library/{book_name}/{verse_number.replace('.', '/')}"
- }
- # getting data
- def get_full_verse(query: str) -> dict:
- """Получает текст стиха или нескольких стихов. Возвражает в объекте, жанные о стихе и в массиве тексты нескольких стихов"""
- verses = []
- parsed_query = __construct_link(query)
- if 'error' in parsed_query:
- return {'error': parsed_query['error']}
- url = parsed_query['link']
- soup = __get_soup(url)
- title = soup.title.text
- if title == '':
- return {'error': [f'Стих либо не найден либо какая-то другая ошибка']}
- title = title.replace('Бг.', 'Бхагавад-гита')
- try:
- verse_text = soup.find(
- 'div', class_='wrapper-verse-text').find_all(class_='r-verse-text')
- if len(verse_text) > 1:
- verse_number = int(title.split('.')[-1].split('-')[0])
- title_template = ".".join(title.split('.')[:-1])
- for v in verse_text:
- text = v.get_text('\n', strip=True)
- verses.append({
- "text": text,
- "title": f"{title_template}.{verse_number}",
- "alias": f"{'.'.join(query.split('.')[:-1])}.{verse_number}"
- })
- verse_number += 1
- else:
- verses.append({
- "text": verse_text[0].get_text('\n', strip=True),
- "title": title,
- "alias": query})
- except Exception:
- return {'error': ['Не найдено']}
- with open('lastverse', 'w') as f:
- f.write(query)
- return {
- 'link': url,
- 'verses': verses,
- }
|