Spaces:
Sleeping
Sleeping
import time | |
import aiohttp | |
from bs4 import BeautifulSoup | |
from helper.html_scraper import Scraper | |
from constants.base_url import GLODLS | |
class Glodls: | |
def __init__(self): | |
self.BASE_URL = GLODLS | |
self.LIMIT = None | |
def _parser(self, htmls): | |
try: | |
for html in htmls: | |
soup = BeautifulSoup(html, "html.parser") | |
my_dict = {"data": []} | |
for tr in soup.find_all("tr", class_="t-row")[0:-1:2]: | |
td = tr.find_all("td") | |
name = td[1].find_all("a")[-1].find("b").text | |
url = self.BASE_URL + td[1].find_all("a")[-1]["href"] | |
torrent = self.BASE_URL + td[2].find("a")["href"] | |
magnet = td[3].find("a")["href"] | |
size = td[4].text | |
seeders = td[5].find("font").find("b").text | |
leechers = td[6].find("font").find("b").text | |
try: | |
uploader = td[7].find("a").find("b").find("font").text | |
except: | |
uploader = "" | |
my_dict["data"].append( | |
{ | |
"name": name, | |
"size": size, | |
"uploader": uploader, | |
"seeders": seeders, | |
"leechers": leechers, | |
"magnet": magnet, | |
"torrent": torrent, | |
"url": self.BASE_URL + url, | |
} | |
) | |
if len(my_dict["data"]) == self.LIMIT: | |
break | |
try: | |
pagination = soup.find("div", class_="pagination") | |
total_pages = pagination.find_all("a")[-2]["href"] | |
total_pages = total_pages.split("=")[-1] | |
my_dict["total_pages"] = int(total_pages) + 1 | |
except: | |
... | |
return my_dict | |
except: | |
return None | |
async def search(self, query, page, limit): | |
async with aiohttp.ClientSession() as session: | |
start_time = time.time() | |
self.LIMIT = limit | |
url = ( | |
self.BASE_URL | |
+ "/search_results.php?search={}&cat=0&incldead=0&inclexternal=0&lang=0&sort=seeders&order=desc&page={}".format( | |
query, page - 1 | |
) | |
) | |
return await self.parser_result(start_time, url, session) | |
async def parser_result(self, start_time, url, session): | |
html = await Scraper().get_all_results(session, url) | |
results = self._parser(html) | |
if results is not None: | |
results["time"] = time.time() - start_time | |
results["total"] = len(results["data"]) | |
return results | |
return results | |
async def trending(self, category, page, limit): | |
async with aiohttp.ClientSession() as session: | |
start_time = time.time() | |
self.LIMIT = limit | |
url = self.BASE_URL + "/today.php" | |
return await self.parser_result(start_time, url, session) | |
async def recent(self, category, page, limit): | |
async with aiohttp.ClientSession() as session: | |
start_time = time.time() | |
self.LIMIT = limit | |
url = self.BASE_URL + "/search.php" | |
return await self.parser_result(start_time, url, session) | |