网页抓取 - 名侦探柯南

我正在尝试从 https://www.kiss-anime.ws/ 下载侦探柯南的所有剧集(向他们致敬)。在从网站抓取下载URL时,我遇到了一个问题。


假设我想下载侦探柯南的第一集,所以我用这个URL(https://www.kiss-anime.ws/Anime-detective-conan-1)来抓取下载URL。现在,当我尝试获取网站的HTML代码时,使用以下代码提取下载URL:


from urllib.request import Request, urlopen


req = Request('https://www.kiss-anime.ws/Anime-detective-conan-1', headers={'User-Agent': 'Mozilla/5.0'})

webpage = urlopen(req).read()

我收到以下错误


Traceback (最近一次调用最后): 文件 “refine.py”, 第 41 行, 在网页中 = urlopen(req).read() 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 222 行, 在 urlopen 中返回 opener.open(url, data, timeout) 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 531 行, 在 open response = meth(req, response) 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 640 行,在 http_response 响应 = self.parent.error( 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 569 行, 错误返回 self._call_chain(*args) 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 502 行, in _call_chain result = func(*args) 文件 “/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/urllib/request.py”, 第 649 行, 在 http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 503: Service 暂时不可用


我不想转到每个链接并手动单击下载链接,因为有超过900集。一旦我有了链接,我将使用以下代码下载剧集:(以防有人想知道我会怎么做)


import webbrowser

webbrowser.open("https://www.kiss-anime.ws/download.php?id=VkE3eFcvTlpZb0RvKzJ0Tmx2V2ROa3J4UWJ1U09Ic0VValh1WGNtY2Fvbz0=&key=B2X2kHBdIGdzAxn4kHmhXDq0XNq5XNu1WtujWq==&ts=1584489495")

任何帮助将不胜感激,谢谢!


茅侃侃
浏览 75回答 1
1回答

HUH函数

所以,显然有808集。看看这个代码,这里有很多事情发生,但它很容易理解。我测试了大约5-6集的下载,它的工作原理...from bs4 import BeautifulSoupfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import TimeoutExceptionfrom http.client import RemoteDisconnectedimport timedef get_browser():    chrome_options = Options()    chrome_options.add_argument("--disable-extensions")    chrome_options.add_argument('--disable-notifications')    chrome_options.add_argument('--incognito')    driver = webdriver.Chrome(options=chrome_options)    return driverdriver = get_browser()page_url = "https://www.kiss-anime.ws/Anime-detective-conan-1"try:    driver.set_page_load_timeout(40)    driver.get(page_url)except TimeoutException:    raise Exception(f"\t{page_url} - Timed out receiving message from renderer")except RemoteDisconnected:    raise Exception(f"\tError 404: {page_url} not found.")WebDriverWait(driver, timeout=40).until(EC.presence_of_element_located((By.ID, "selectEpisode")))driver.find_element_by_id("selectEpisode").click()soup = BeautifulSoup(driver.page_source, "html.parser")options = soup.find("select", attrs={"id": "selectEpisode"}).find_all("option")print(f"Found {len(options)} episodes...")base_url = "https://www.kiss-anime.ws/"for idx, option in enumerate(options):    print(f"Downloading {idx+1} of {len(options)}...")    page_url = option['value']    try:        driver.set_page_load_timeout(40)        driver.get(page_url)    except TimeoutException:        print(f"\t{page_url} - Timed out receiving message from renderer")        continue    except RemoteDisconnected:        print(f"\tError 404: {page_url} not found.")        continue    WebDriverWait(driver, timeout=40).until(EC.presence_of_element_located((By.ID, "divDownload")))    driver.find_element_by_id("divDownload").click()    print(f"\t Downloading...")    time.sleep(15)driver.quit()print("done")因此,首先,我在chrome浏览器中打开URL,并读取总共808的下拉列表值。现在,我正在浏览这808个URL中的每一个,以获取下载视频所需的实际链接。通过使用循环,我实际上是在模拟按钮点击,视频开始下载。请记住更改位置,该位置应表示根据您的互联网速度下载一集所需的大约时间(秒)。.click()time.sleep(x)x您需要使用 安装和打包。另外,下载chromedriver.exe并确保它与此脚本的路径相同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python