步骤1:打开Google Chrome to Chess.com网站
步骤2:通过主页登录到我的帐户
步骤3:将鼠标光标悬停在网页左侧的横幅上的大"学习"按钮上。这将扩展到另一个菜单。
步骤4:在弹出的此菜单上,我将单击"视频"的按钮,该按钮将导航到此URL:" https://www.chess.com/videos"
步骤5:然后,我单击"库"按钮将我带到:" https://www.chess.com/videos/library"
步骤6:我通过单击标题链接打开一个特定的视频(在列表中的许多视频中)。
这就是列表的样子:
https://photos.app.goo.gl/vsxhqh5siiggmmoja
步骤7:在新页面上,视频播放器处于清晰的视线状态,我右键单击,然后检查元素 - 以便输入Chrome开发工具像这样:https://photos.app.goo.gl/96ygytfla58mhsmp7
步骤8:然后,我单击开发工具框左上角的"指针箭头"按钮。
步骤9:然后我在视频播放器上"选择"以突出显示。
cf。这个图片:https://photos.app.goo.gl/6wslfezmcbjvjthj9
步骤10:
然后,我打开出现在"元素"选项卡中的.mp4链接,因此将打开一个新选项卡,该选项卡仅包含屏幕上的视频播放器
步骤11(最后一步):然后,我单击右下角的按钮,然后选择"下载"以获取.mp4文件。
cf。此图像:https://photos.app.goo.gl/gdmxwmnbswbcq4lp8
我发现从这样的网站下载所有嵌入式视频的过程非常繁琐,因为我实际上必须打开一个新视频才能有机会下载它。
因此,我正在考虑将我的第一个项目作为一个完整的新手程序员(以保持动力!),以尝试编程可以自动化此过程的东西。
我的问题是:是否有可能自动化我上面说明的这种算法(也许有某种机器人或网络爬网),以及我应该学到哪些主题以发展技能,以便做什么必要的?
非常感谢您的帮助!我非常感谢:)
我意识到您可能不是在寻找代码解决方案,但是我包含了可以用于灵感的一个。它将所有视频下载到目录" Chessvideos"中(请注意,每个视频都有123页,每个视频上都有约25个视频,因此要花很长时间才能完成)。
构建这样的webcrawler是一个过程。知道您可以使用requests
获取URL的HTML,并且您可以"查询" DOM使用BeautifulSoup
查找元素,打开浏览器并在问题中提到的检查。例如,您应该寻找哪些HTML属性?类,ID,标签等此过程的一部分也是要意识到系统将如何响应您的请求,例如您提到的登录 - 这通常是一个要求,但实际上并不是这个网站,因此问题要简单得多。希望它有些用。
import requests
from bs4 import BeautifulSoup
import os
class ChessDownloader():
download_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)), "chessvideos")
def __init__(self):
res = requests.get("https://www.chess.com/videos/library")
if res.status_code == 200:
b = BeautifulSoup(res.text, features='html5lib')
a = b.find('a', text='Last').get('href')
pages = int(a.replace('https://www.chess.com/videos/library?page=', '')) # get the number of pages using the "Last" button
for i in range(pages):
self.download_videos_from_page(i)
def download_videos_from_page(self, page_number):
if page_number == 0:
res = requests.get('https://www.chess.com/videos/library')
else:
res = requests.get('https://www.chess.com/videos/library?page=' + str(page_number))
if res.status_code == 200:
b = BeautifulSoup(res.text, features='html5lib')
links = b.find_all('a', { 'class' : 'content-image' })
links = [a.get('href') for a in links]
for link in links:
r = requests.get(link)
if r.status_code == 200:
b = BeautifulSoup(r.text, features='html5lib')
video_url = b.find('meta', {'property': 'og:video:secure_url'}).get('content')
self.download_video(video_url)
def download_video(self, url):
if not os.path.exists(self.download_directory):
os.mkdir(self.download_directory)
res = requests.get(url)
if res.status_code == 200:
name = url.rsplit('/', 1)[-1]
file_path = os.path.join(self.download_directory, name)
if not os.path.exists(file_path): # Dont download if we already have it
with open(file_path, 'wb+') as f:
f.write(res.content)
c = ChessDownloader()