书接上文,说到想批量下载电影,通过一个数据库获取了所有下载内容的链接,所以这个数据库从那里来呢?当然要依靠我们万能的python了,正好我最近在用一个bt站,又很想从上面找日剧看,奈何一个一个搜索下载太麻烦了,更不要说搭建好qbittorrent的webui,然后从nas下载了。
基本架构:用python获取日剧信息,然后从中间获得清晰度最高的种子,然后传输到局域网的nas下载。
先来看看爬虫的核心部分吧~后面有源码!
首先当然是打开搜索页面,发现即使按照日本+日语两个关键词搜索,仍然会有007这样的电影混进其中,因此需要改进,改进方法就是从html中抓取是否包含“语 言 日语”以及“地 域 日本”这样的关键词。第一个部分的源代码如下:
import requests
import re
import time
import random
def getdetail(file, id):
"""
分析详情页函数
:param file: 详情页html文件对象
:return: 一个字典,包含id、译名、清晰度信息、其他版本id、带passkey的url,如果不是日剧就返回空
"""
with open('log.txt', 'r', encoding='utf8') as logfile:
logtext = logfile.read()
if logtext.find(f"'id': {str(id)}") != -1:
print('getted!:', id)
return
return_dic = {
'id': id,
'name': '',
'res': '',
'url': '',
'other': []
}
text = file.read()
if text.find('产 地 日本') == -1 or text.find('语 言 日语') == -1:
return
res_re = re.compile('<b>分辨率: </b>(.*?)[pi]')
try:
return_dic['res'] = int(res_re.findall(text)[0])
except:
return_dic['res'] = 0
other_re = re.compile('a href="https://www\.hdarea\.co/details\.php\?id=(.*?)&hit=1"')
return_dic['other'] = other_re.findall(text)
name_re = re.compile('译 名 (.*?)<')
name_list = name_re.findall(text)
if name_list:
if name_list[0].find('/') != -1:
return_dic['name'] = name_list[0][:name_list[0].find('/')]
else:
return_dic['name'] = name_list[0]
else:
bad_name = re.compile('">副标题</td><td class="rowfollow" valign="top" align="left">(.*?)</td></tr>').f