from xml.dom import NotFoundErr
import requests
from bs4 import BeautifulSoup, NavigableString
from fake_useragent import UserAgent
BASE_URL = "https://ww1.gogoanime2.org"
def search_scraper(anime_name: str) -> list:
"""[summary]
Take an url and
return list of anime after scraping the site.
>>> type(search_scraper("demon_slayer"))
<class 'list'>
Args:
anime_name (str): [Name of anime]
Raises:
e: [Raises exception on failure]
Returns:
[list]: [List of animes]
"""
# concat the name to form the search url.
search_url = f"{BASE_URL}/search/{anime_name}"
response = requests.get(
search_url, headers={"UserAgent": UserAgent().chrome}
) # request the url.
# Is the response ok?
response.raise_for_status()
# parse with soup.
soup = BeautifulSoup(response.text, "html.parser")
# get list of anime
anime_ul = soup.find("ul", {"class": "items"})
anime_li = anime_ul.children
# for each anime, insert to list. the name and url.
anime_list = []
for anime in anime_li:
if not isinstance(anime, NavigableString):
try:
anime_url, anime_title = (
anime.find("a")["href"],
anime.find("a")["title"],
)
anime_list.append(
{
"title": anime_title,
"url": anime_url,
}
)
except (NotFoundErr, KeyError):
pass
return anime_list
def search_anime_episode_list(episode_endpoint: str) -> list:
"""[summary]
Take an url and
return list of episodes after scraping the site
for an url.
>>> type(search_anime_episode_list("/anime/kimetsu-no-yaiba"))
<class 'list'>
Args:
episode_endpoint (str): [Endpoint of episode]
Raises:
e: [description]
Returns:
[list]: [List of episodes]
"""
request_url = f"{BASE_URL}{episode_endpoint}"
response = requests.get(url=request_url, headers={"UserAgent": UserAgent().chrome})
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
# With this id. get the episode list.
episode_page_ul = soup.find("ul", {"id": "episode_related"})
episode_page_li = episode_page_ul.children
episode_list = []
for episode in episode_page_li:
try:
if not isinstance(episode, NavigableString):
episode_list.append(
{
"title": episode.find("div", {"class": "name"}).text.replace(
" ", ""
),
"url": episode.find("a")["href"],
}
)
except (KeyError, NotFoundErr):
pass
return episode_list
def get_anime_episode(episode_endpoint: str) -> list:
"""[summary]
Get click url and download url from episode url
>>> type(get_anime_episode("/watch/kimetsu-no-yaiba/1"))
<class 'list'>
Args:
episode_endpoint (str): [Endpoint of episode]
Raises:
e: [description]
Returns:
[list]: [List of download and watch url]
"""
episode_page_url = f"{BASE_URL}{episode_endpoint}"
response = requests.get(
url=episode_page_url, headers={"User-Agent": UserAgent().chrome}
)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
try:
episode_url = soup.find("iframe", {"id": "playerframe"})["src"]
download_url = episode_url.replace("/embed/", "/playlist/") + ".m3u8"
except (KeyError, NotFoundErr) as e:
raise e
return [f"{BASE_URL}{episode_url}", f"{BASE_URL}{download_url}"]
if __name__ == "__main__":
anime_name = input("Enter anime name: ").strip()
anime_list = search_scraper(anime_name)
print("\n")
if len(anime_list) == 0:
print("No anime found with this name")
else:
print(f"Found {len(anime_list)} results: ")
for i, anime in enumerate(anime_list):
anime_title = anime["title"]
print(f"{i+1}. {anime_title}")
anime_choice = int(input("\nPlease choose from the following list: ").strip())
chosen_anime = anime_list[anime_choice - 1]
print(f"You chose {chosen_anime['title']}. Searching for episodes...")
episode_list = search_anime_episode_list(chosen_anime["url"])
if len(episode_list) == 0:
print("No episode found for this anime")
else:
print(f"Found {len(episode_list)} results: ")
for i, episode in enumerate(episode_list):
print(f"{i+1}. {episode['title']}")
episode_choice = int(input("\nChoose an episode by serial no: ").strip())
chosen_episode = episode_list[episode_choice - 1]
print(f"You chose {chosen_episode['title']}. Searching...")
episode_url, download_url = get_anime_episode(chosen_episode["url"])
print(f"\nTo watch, ctrl+click on {episode_url}.")
print(f"To download, ctrl+click on {download_url}.")
没有合适的资源?快使用搜索试试~ 我知道了~
python 课程设计 一些有趣的项目 课程设计下载 代码下载
共37个文件
py:36个
disabled:1个
需积分: 0 1 下载量 69 浏览量
2023-05-19
03:47:13
上传
评论
收藏 31KB ZIP 举报
温馨提示
二氧化碳排放量(Co2 Emission)数字转为单词(Convert Number To Words)使用XPath获取COVID统计数据(Covid Stats Via Xpath)爬取谷歌搜索结果(Crawl Google Results)爬取谷歌学术引用(Crawl Google Scholar Citation)货币转换器(Currency Converter) 当前股票价格(Current Stock Price) 当前天气(Current Weather) 每日星座运势(Daily Horoscope) 从谷歌查询中下载图像(Download Images From Google Query) 从URL获取电子邮件(Emails From Url) 获取动漫并播放(Fetch Anime And Play) 获取BBC新闻(Fetch Bbc News) 获取GitHub信息(Fetch Github Info) 获取工作职位(Fetch Jobs) 获取名言引用(Fetch Quotes) 获取Well Rx价格(Fetch Well Rx Price) 等20个项目
资源推荐
资源详情
资源评论
收起资源包目录
web_programming.zip (37个子文件)
web_programming
emails_from_url.py 3KB
test_fetch_github_info.py 859B
__init__.py 0B
crawl_google_results.py 799B
get_user_tweets.py 2KB
reddit.py 2KB
download_images_from_google_query.py 3KB
current_stock_price.py 501B
get_top_hn_posts.py 872B
slack_message.py 695B
crawl_google_scholar_citation.py 958B
search_books_by_isbn.py 3KB
current_weather.py 948B
random_anime_character.py 1KB
nasa_data.py 1KB
convert_number_to_words.py 3KB
fetch_quotes.py 874B
covid_stats_via_xpath.py 827B
open_google_results.py 906B
fetch_jobs.py 906B
giphy.py 563B
world_covid19_stats.py 931B
currency_converter.py 4KB
instagram_crawler.py 4KB
get_imdbtop.py 1KB
fetch_bbc_news.py 556B
get_imdb_top_250_movies_csv.py 925B
instagram_pic.py 654B
recaptcha_verification.py 3KB
fetch_well_rx_price.py 3KB
get_amazon_product_data.py 3KB
daily_horoscope.py 1005B
instagram_video.py 559B
get_top_billionaires.py.disabled 2KB
fetch_github_info.py 1KB
co2_emission.py 716B
fetch_anime_and_play.py 5KB
共 37 条
- 1
资源评论
Nosetime
- 粉丝: 0
- 资源: 43
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 演讲稿.txt
- 基于Python的爬虫案例-软科中国大学TOP200
- 碳排放权交易明细数据(2024年5月更新).xlsx
- 特殊文件属性命令chattr和lsattr
- HTML、CSS 和 JavaScript动态、交互式的网页 .txt
- b0cd8f9b23d4e5e381b6a8fd8ee0e907.JPG
- ff45d61c5900e45634cf4cac6cff61a1.JPG
- springboot.springboot.springboot.springboot.txt
- linux-进程与服务管理
- 毕业设计基于Django+MySQL+Redis实现简单的天气预报系统python源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功