网络爬虫(四)电影天堂电影下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 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控制迅雷自动下载电影的?,增加一些有趣的东西。

同载于:http://www.viljw1557.cn

猜你喜欢

转载自blog.csdn.net/u014626748/article/details/84447751