Open anvme opened 4 years ago
Желательно requests организовать с обходом cloudflare ddos protection: https://pypi.org/project/cloudscraper/ И возможностью использовать proxy для обхода блока РКН
Можно поподробнее откуда парсить и что?
Ну например сериал ходячие мертвецы: делаем request к https://www.lostfilm.tv/search/?q=%D1%85%D0%BE%D0%B4%D1%8F%D1%87%D0%B8%D0%B5+%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D1%8B оттуда вынимаем dif class="row-search" и смотрим href="/series/The_Walking_Dead" Заходим на https://www.lostfilm.tv/series/The_Walking_Dead и снимаем данные Описание: class="text-block description" Заходим на https://www.lostfilm.tv/series/The_Walking_Dead/seasons/ из class="gamma" можно взять название эпизодов
Минимальные данные которые нужны это описание для сериала.
Я накидал базу для запроса сериала и получения сюжета. Мой пример работает через вызов из вне
python3 example.py "%D1%85%D0%BE%D0%B4%D1%8F%D1%87%D0%B8%D0%B5+%D0%BC%D0%B5%D1%80%D1%82%D0%B2%D0%B5%D1%86%D1%8B"
Сама функция
import sys
import re
import requests
import cloudscraper
import traceback
import six
from enum import Enum
from requests import Response
import html
from bs4 import BeautifulSoup
PLUGIN_NAME = 'lostfilm.tv'
url="https://www.lostfilm.tv"
search="/search/?q="
name=(str(sys.argv[1]))
scraper = cloudscraper.create_scraper()
def get_soup(url, parser=None):
if parser:
return BeautifulSoup(url, parser)
else:
if 'lxml' in sys.modules: # pragma: no cover
return BeautifulSoup(url, 'lxml')
else:
return BeautifulSoup(url, 'html.parser')
#генерируем url для запроса сериала
download_serials_url=url+search+name
serials_search = scraper.get(download_serials_url)
#формируем html страницу
soup = get_soup(serials_search.text)
#ищем нужный div
serials_class = soup.find('div', class_='row-search')
#вытаскиваем путь для сериала
serials_path = serials_class.find("a", {"class":"no-decoration"})['href']
#формируем ссылку на сериал и запрос
download_caption_url=url+serials_path
caption_search = scraper.get(download_caption_url)
#формируем html страницу
soup = get_soup(caption_search.text)
#ищем нужный div и смотрим сразу текстовые значения
caption_class = soup.find('div', class_='text-block description').text
#получаем обрезку только информации о сюжете
print(caption_class[caption_class.find('Сюжет'):])
Основная проблема в разработке плагинов для PLEX в том, что мы очень ограничены версией Python 2.7 и набором установленных сторонних модулей(модули requests, cloudscraper, BeautifulSoup отсутствуют в окружении PLEX Media Server), теоретически их можно встроить в наш плагин, но из-за этого размер плагина возрастёт и в целом стабильность плагина снизится, а сложность тестирования поднимется. Так же не факт, что он будет работать на разных платформах(Windows, ARM)
Названия серий прекрасно тянутся с Кинопоиска или результаты оттуда не устраивают? Или есть еще какой-то контент, который нужно тянуть с Лостфильма?
Реализовать можно, но с учётом встраивания прокси это дело может очень затянуться
На самом деле, я попытался вспомнить все разы включения cloudflare protection. Один раз это попало на страницу авторизации, другой на страницу скачивания серии.
В общем можно реализовать и на обычном requests.
Реализовать можно, но с учётом встраивания прокси это дело может очень затянуться
По прокси я там сделал апдейт у амиротина в feature request) Есть отличное бесплатное решение для части юзеров
Если в родительской папке сериала есть тег в конце [LostFilm.tv] (Не зависимо от регистра) парcить lostfilm.tv