这些天工作室来了几位女生,想起在误杀中主人公曾说过“当你看过一千部以上的电影后,什么事情都不再离奇”,为了解他们我决定从此方面入手,通过电影来分析他们的性格。 首先,我通过一些手段找到了他的豆瓣账号(别问是怎么找到的。。。。。) 大致浏览一下发现她比较喜欢悬疑和恐怖类型的电影(共同话题有了),接下来我们通过python爬取这些电影名称,这里有观察到页面链接存在一个start的参数,有名字显然可知该参数用来控制页面,每个页面步长15.于是可写出如下代码
import requests
from lxml import etree
import re
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50'
}
for i in range(0,210,15):
god_url='https://movie.douban.com/people/******/collect?start=%d&sort=time&rating=all&filter=all&mode=grid'
movie_list=requests.get(url=format(my_url%i),headers=headers).text
movie_list_tree=etree.HTML(movie_list)
movie_name_list=movie_list_tree.xpath('//*[@id="content"]/div[2]/div[1]/div[2]/div')`
for j in movie_name_list:
movie_name=j.xpath('./div[2]/ul/li[1]/a/em/text()')[0]
movie_name=movie_name.split(' ',1)[0] if(movie_name.find('/')) else movie_name
print(movie_name)
这里我对看过的电影名做了一些处理,这是应为正常获取的电影名称部分会存在中英文混写的情况,这样并不有利于我进行下一步的电影搜索,所以在此我采用了将判断电影名是否含有‘/’的方法来进行分割(处理前的图片如下)。 然后,我通过第三方搜索引擎对这些片名进行了查找(这里我才用的是BT电影天堂) 代码如下
mange_index_url='https://www.jsr9.com/?s='+movie_name
mange_html=requests.get(url=mange_index_url,headers=headers).text
try:
mange_list_tree=etree.HTML(mange_html)
mange_second_url=mange_list_tree.xpath('/html/body/div[2]/div[1]/div[2]/div[1]/p[1]/a/@href')[0]
print(mange_second_url)
except Exception as e:
falid_movie_name.append(movie_name)
mange_text=requests.get(url=mange_second_url,headers=headers).text
mange_end_html=etree.HTML(mange_text)
if len(mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div')) >1:
for x in mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div'):
movie_radio=x.xpath('./a/p/text()[1]')[0]
if movie_radio.find('1080p'):
mange_url=x.xpath('./ul/li[2]/span/a/@href')[0]
movie_name_url=x.xpath('./ul/li[3]/span/text()')[0].split(' ',1)[0]
print(movie_radio)
print(mange_url)
break
mange_url=mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div[1]/a/@href')[0] if(mange_url!='') else mange_url
movie_name_url=mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div[1]/ul/li[3]/span/text()')[0].split(' ',1)[0] if(movie_name_url!='') else movie_name_url
这里,部分电影名称在不同网站会存在一些差异,所以,我在这边建立一个faild_movie_name用来存储这些失败的电影名单,方便后续处理。然后,由于这次目的是为了追寻我的女神,所以,视频质量一定不能马虎,所以,在获取资源的同时,我还加入了优先获取1080p的电影资源文件。
最后也是最为重要的一部分,那就是将获取的磁力链接下载,这里,我查了许多资料,最后我使用了调用迅雷来下载电影的方案,但这边也存在一个问题,按照网络现有的资源,迅雷9,10是可以通过调整,下载设置来解决频繁的新建任务面板,而我目前电脑上安装的迅雷11,尽管也存在这方面的设置,但是调整过后,却没有任何效果,所以我这里采用了一个十分笨拙的方案,那就是直接模拟鼠标点击事件。 具体代码如下:
thunder = Dispatch('ThunderAgent.Agent64.1')
thunder.AddTask(mange_url, movie_name_url, r"H:\电影")
thunder.CommitTasks()
time.sleep(5)
pyautogui.click(x=846, y=867)
print("任务已建立,开始下载:{}....".format(movie_name))
time.sleep(3)
有必要说明的是这里的注册名,也就是
thunder = Dispatch(‘ThunderAgent.Agent64.1’)
这里的获取需要通过注册表搜寻得到,在注册表中搜索thunder,即可查到相关信息 然后,这里,我给每一次调用迅雷和模拟点击之间都加入了延迟,因为此次写的比较简单,没有采用一些异步框架,为了防止冲突,所以采用了该解决方案(其实就是懒。。。。。。)
最后,就是关于点击事件的x,y坐标,这个我实际上也是采用的pyautogui中的事件来获取的,首现,打开新建任务面板,然后通过调用
print(pyautogui.position())
来获取相关参数。 这样我们只需等待一杯茶的时间,就能尽想成果了~~~~
其效果如下: 本次所用到的库
request lxml pyautogui time
完整代码
import requests
from lxml import etree
import re
from win32com.client import Dispatch
import time
from win32 import win32gui
import pyautogui
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50'
}
thunder = Dispatch('ThunderAgent.Agent64.1')
falid_movie_name=[]
mange_url=''
movie_name_url=''
for i in range(0,210,15):
my_url='https://movie.douban.com/people/****/collect?start=%d&sort=time&rating=all&filter=all&mode=grid'
movie_list=requests.get(url=format(my_url%i),headers=headers).text
movie_list_tree=etree.HTML(movie_list)
movie_name_list=movie_list_tree.xpath('//*[@id="content"]/div[2]/div[1]/div[2]/div')
for j in movie_name_list:
movie_name=j.xpath('./div[2]/ul/li[1]/a/em/text()')[0]
movie_name=movie_name.split(' ',1)[0] if(movie_name.find('/')) else movie_name
print(movie_name)
mange_index_url='https://www.jsr9.com/?s='+movie_name
mange_html=requests.get(url=mange_index_url,headers=headers).text
try:
mange_list_tree=etree.HTML(mange_html)
mange_second_url=mange_list_tree.xpath('/html/body/div[2]/div[1]/div[2]/div[1]/p[1]/a/@href')[0]
print(mange_second_url)
except Exception as e:
falid_movie_name.append(movie_name)
mange_text=requests.get(url=mange_second_url,headers=headers).text
mange_end_html=etree.HTML(mange_text)
if len(mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div')) >1:
for x in mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div'):
movie_radio=x.xpath('./a/p/text()[1]')[0]
if movie_radio.find('1080p'):
mange_url=x.xpath('./ul/li[2]/span/a/@href')[0]
movie_name_url=x.xpath('./ul/li[3]/span/text()')[0].split(' ',1)[0]
print(movie_radio)
print(mange_url)
break
mange_url=mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div[1]/a/@href')[0] if(mange_url!='') else mange_url
movie_name_url=mange_end_html.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div[1]/ul/li[3]/span/text()')[0].split(' ',1)[0] if(movie_name_url!='') else movie_name_url
thunder.AddTask(mange_url, movie_name_url, r"H:\电影")
thunder.CommitTasks()
time.sleep(5)
pyautogui.click(x=846, y=867)
print("任务已建立,开始下载:{}....".format(movie_name))
time.sleep(3)
print('失败的电影有'+str(falid_movie_name))
|