python软件安装链接电视_Python爬虫程序:电视剧琅琊榜全集的自动化处理

题外话

电视剧《琅琊榜》的大热期已过,一直没时间看看究竟演的啥?于是,在度娘上找到下载地址,准备细细品味(强迫症!非要下载下来看)。

附上地址:琅琊榜高清下载地址,坑,就在整个网页54集的电视剧居然没有给一个“全选”按钮,非得点一个链接才能下载一集。这样的事情,就促成了强迫症做下了接下来的事情……

这样学习挺有意思的。

自动化处理的思路

该网页是静态页面,我的目的是使用Python将网页标签中对应的每一集的download链接爬出来,保存在windows剪切板或文本文件中,之后直接把下载链接复制到迅雷或QQ旋风等下来器中,完成下载,这样一看就很简单了, 高手勿喷啊>>。

下面是详细的过程。

开发环境win10 64位, win7以上应该都可以;

Python 2.7.10_x64;

IDE: Pycham Community Edition 5.0.1;

所需要的python库:urllib2、bs4、chardet、python_win32 API等.

代码描述

代码清单包含:clipBoardUtil.py、lybTv_main.py、lybTvSpider_Py2.py、fileRename.py、lyb_urls.txt 五个文件。

整个目录结构如下图所示:

[1]. 首先创建lybTvSpider_Py2.py文件,获取网页源码进行解析,是功能实现的主要内容。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73# lybTvSpider_Py2.py

# coding=utf-8

# python-version: 2.x

import urllib2

import bs4

import chardet

class LybTvSpider:

"琅琊榜电视剧爬虫工具类"

def __init__(self):

"构造函数"

self.__headers = ('User-Agent',

'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36')

self.__opener = urllib2.build_opener()

self.__opener.addheaders = [self.__headers]

def open_url(self, url):

"指定URL,打开链接地址"

content = self.__opener.open(url).read()

encoding = chardet.detect(content)['encoding']

content = content.decode(encoding, 'ignore')

return content

def get_tvs(self, content):

"获取每集电视相关的网页标签, 特征值的获取:

tvs_list = soup.findAll('td', style='WORD-WRAP: break-word')

return tvs_list

def get_download_url(self, tvs_list):

"获取每集电视中的下载地址"

tvs_list_url = []

for tv in tvs_list: # 遍历标签

tvs_list_url.append(tv.a['href'] + "\n") # 获取所有的下载列表添加到list中

return tvs_list_url

def save_download_urls(self, tvs_list_url):

"将下载链接保存至文件"

fr = file("lyb_urls.txt", "w+")

for item in tvs_list_url:

fr.write(item.encode("utf-8"))

fr.close()

def main_test():

"模块测试"

url = "http://www.dy2018.com/i/95650.html"

lybTvSpider = LybTvSpider()

content = lybTvSpider.open_url(url) # 获取网页源代码,同在浏览器中右键查看源代码内容一致

# print content

tvs = lybTvSpider.get_tvs(content)

print "tvs List---> ", tvs

tvs_url = lybTvSpider.get_download_url(tvs)

print "tvs_url ---> ", tvs_url

lybTvSpider.save_download_urls(tvs_url)

if __name__ == "__main__":

main_test()

其中用到的Python类库urllib2、bs4、chardet,可使用PyCham快捷键Alt + Enter, 代码提示后自动安装,这个功能很赞!

[2]. lybTv_main.py运行主程序:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20# lybTv_main.py

# coding=utf-8

# python-version: 2.x

from lybTvSpider_Py2 import LybTvSpider

from python27.python35 import clipboardUtil

url = "http://www.dy2018.com/i/95650.html"

lybTvSpider = LybTvSpider()

content = lybTvSpider.open_url(url) # 获取网页源代码,同

tvs = lybTvSpider.get_tvs(content)

tvs_url = lybTvSpider.get_download_url(tvs)

# 将下载地址复制到剪切板,之后就可以用下载器批量下载了

clipboardUtil.setText("".join(tvs_url))

# print str(clipboardUtil.getText()).decode("GBK")

# 同时在文本文件中保存一份下载地址

lybTvSpider.save_download_urls(tvs_url)

说明:当我们解析到完整的下载地址后并存放到了tvs_url 列表当中,tvs_url 已经格式化了,在每个下载地址后添加了换行符“\n”,这时,我们就可以将下载地址直接保存到windows系统的剪切板中,同时打开迅雷或QQ旋风等下载器将会自动识别windows剪切板中的下载地址,只需点一下下载器的下载按钮就可以开始Downloading了……(代码中为了防止出错,添加了save_download_urls(self, tvs_list_url)函数,可以将所有的下载地址保存在lyb_urls.txt文件中)

效果图如下:

[3]. 使用到clipboardUtil.py代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41# clipBoardUtil.py

# coding=utf-8

# 使用win32 api 操作Windows剪切板

# import sys

# sys.path.append("/to/path/win32clipboard")

# sys.path.append("/to/path/win32con")

import win32clipboard as w

import win32con

def getText():

"获取windows剪切板内容"

w.OpenClipboard()

d = w.GetClipboardData(win32con.CF_TEXT)

w.CloseClipboard()

return d

def setText(aString):

"设置windows剪切板的内容"

w.OpenClipboard()

w.EmptyClipboard()

# 设置Unicode编码格式

w.SetClipboardData(win32con.CF_UNICODETEXT, aString)

w.CloseClipboard()

def main():

"测试程序"

print getText()

setText("我在剪切板中")

print getText()

# 判断是否是在直接运行该.py文件

if __name__ == "__main__":

main()

Python调用Win32API使用Windows的剪切板功能,win32的Python库需要手动安装一下,下载地址为:

找到自己对应的版本,由于我使用的是Python2.7.10,因此,下载的win32版本为:/Build 219/目录下的pywin32-219.win-amd64-py2.7.exe版本。注意,安装后PyCham不能立即识别,需重启一下IDE。

<>

剧集重命名下载完成后,强迫症又发现默认的剧集名称臭长难视,那就果断改名呗!文件名主要有两类,形如:

[电影天堂www.dy2018.com]琅琊榜_21.720p未删减版.mp4 和

琅琊榜_20.720p未删减版[电影天堂www.dy2018.com].mp4,目标是变成这样的:琅琊榜_20.mp4。具体描述如下:

[4]. fileRename.py代码清单:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39# fileRename.py

# coding:utf-8

import os

import sys # 设置系统默认编码格式:utf-8

reload(sys)

sys.setdefaultencoding('utf8')

def renameFiles(dirPath):

"指定文件目录,重命名该目录下以.mp4结尾的文件"

os.chdir(dirPath) # 切换到当前目录下

dirContent = os.listdir(dirPath)

for file in dirContent:

if file.startswith("[") and file.endswith('.mp4'):

temp = file.split(']')

content = temp[1].split(".")

newName = content[0] + "." + content[len(content) - 1]

os.rename(file, newName)

print file + " -> " + newName + " ------> OK!"

elif file.endswith(".mp4"):

temp = file.split('.')

newName = temp[0] + "." + temp[len(temp) - 1]

os.rename(file, newName)

print file + " -> " + newName + " ------> OK!"

return;

def main_test():

"在当前模块中测试"

renameFiles("D:\迅雷下载".encode('GBK'))

if __name__ == "__main__":

main_test()

最终的效果如下所示(这就清爽多了):

最后,附上本爬虫源代码: 项目 github 地址

END!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值