版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014626748/article/details/84447751
到目前为止,我们已经学习了如何获取到网页源码,以及如何用正则表达式提取想要的信息,是时候向批量下载电影天堂电影这个目标迈进了!
在开始写代码之前,我们可以先捋一捋思路:首先,我们需要获取到电影天堂的源码,然后提取到每部电影的主页链接,之后获取到每部电影主页的源码,并从中提取到电影下载地址。最后,打开迅雷让其下载这些电影。
不过,就算我们提取到了电影的下载地址,如何用Python代码打开迅雷,并让其下载电影呢?答案是我们可以用命令呀!
下图所示的是迅雷的安装地址
打开控制台,输入以下命令
电影就下载起来啦!
当然,最好将迅雷做以下设置(不然可能有点烦)
刚才是我们手动敲命令进行下载,那么如何用代码实现呢?用os
模块的system
函数即可。我们写出一个如下的函数:
def downloadMovie(path, url):
os.system(r'"{path}" {url}'.format(path=path, url=url))
传入程序路径以及电影下载地址即可。
话不多说,下面开始着手整合吧!
import urllib.request
from urllib.request import Request
from urllib.parse import urljoin
import re
import os
import time
# 获取网页源码
def getHTML(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 OPR/55.0.2994.61'
}
request = Request(url,headers=headers)
response = urllib.request.urlopen(request)
return response.read().decode('gbk')
# 提取信息
def parseHTML(content, pattern):
pattern = re.compile(pattern, re.S)
results = pattern.findall(content)
return results
# 下载电影
def downloadMovie(path, url):
os.system(r'"{path}" {url}'.format(path=path, url=url))
if __name__ == '__main__':
base_url = 'https://www.dy2018.com'
content = getHTML(base_url)
pattern = r"<a\s+?href='(.*?)'\s+?title=.*?>"
download_pattern = r"<td.*?><a.*?>(.*?)</a>"
program_path = r'C:\Software\Thunder\Program\Thunder.exe'
for item in parseHTML(content, pattern):
if item.startswith('/i'):
absolute_url = urljoin(base_url, item)
html = getHTML(absolute_url)
download_url = parseHTML(html, download_pattern)[0]
print(download_url)
downloadMovie(program_path, download_url)
time.sleep(3)
运行结果如下:
Nice!
当然,你可以参考我是如何使用python控制迅雷自动下载电影的?,增加一些有趣的东西。