为了账号安全,请及时绑定邮箱和手机立即绑定

网页抓取 - 名侦探柯南

网页抓取 - 名侦探柯南

茅侃侃 2022-09-06 16:37:40
我正在尝试从 https://www.kiss-anime.ws/ 下载侦探柯南的所有剧集(向他们致敬)。在从网站抓取下载URL时,我遇到了一个问题。假设我想下载侦探柯南的第一集,所以我用这个URL(https://www.kiss-anime.ws/Anime-detective-conan-1)来抓取下载URL。现在,当我尝试获取网站的HTML代码时,使用以下代码提取下载URL:from urllib.request import Request, urlopenreq = 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 webbrowserwebbrowser.open("https://www.kiss-anime.ws/download.php?id=VkE3eFcvTlpZb0RvKzJ0Tmx2V2ROa3J4UWJ1U09Ic0VValh1WGNtY2Fvbz0=&key=B2X2kHBdIGdzAxn4kHmhXDq0XNq5XNu1WtujWq==&ts=1584489495")任何帮助将不胜感激,谢谢!
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

所以,显然有808集。看看这个代码,这里有很多事情发生,但它很容易理解。我测试了大约5-6集的下载,它的工作原理...


from bs4 import BeautifulSoup

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from selenium.common.exceptions import TimeoutException

from http.client import RemoteDisconnected

import time



def 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 driver



driver = 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并确保它与此脚本的路径相同。


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信