python获取电影天堂各版块电影
本帖最后由 null119 于 2018-12-18 08:44 编辑版本:
Python3.6.5
引用库:
re,requests,json,lxml
运行效果:
代码:
#-*-coding:UTF-8-*-
import re
import requests
import json
from lxml import etree
weburl =r"http://www.ygdy8.net"
def getpage(url): #获取电影列表页面数
t= requests.get(url)
t.encoding='gbk'
t=''.join(re.findall("/(\d+)条",t.text))
sum=int(t) // 25
if int(t) % 25 != 0:
sum+=1
return sum
def getlist(url): #获取电影列表页各个电影URL
t=requests.get(url)
t.encoding='gbk'
#html = etree.HTML(t.text)
#murl = html.xpath('//*[@class="ulink"]/@href')
murl = re.findall('(/html/.*?/.*?/\d+/\d+.html)" class="ulink"',t.text)
#mname= html.xpath('//*[@class="ulink"]/text()')
return murl
def getdownurl(url): #获取电影页下载地址
t = requests.get(url)
t.encoding = 'gbk'
if len(re.findall('fdfddf"><a href="(.*?)"',t.text))>0 :
ftpurl= re.findall('fdfddf"><a href="(.*?)"',t.text)
return ftpurl
else:
return ''
def getdbdata(moivename): #获取豆瓣评分
dburl =r"http://api.douban.com/v2/movie/search?q="+moivename
txt=requests.get(dburl)
l=json.loads(txt.text)
#dbid=l["subjects"]["id"]
#dbweburl=l["subjects"]["alt"]
if 'code' in l.keys():
return -1
else:
dbpf=l["subjects"]["rating"]["average"]
return dbpf
def getgf(url): #获取高评分电影
for i in range(1,5):
if i==1:
t = requests.get(url+'.html')
else:
t = requests.get(url +'_'+ str(i) + '.html')
t.encoding = 'gbk'
tmp=re.findall('href="(http://www\.ygdy8\..*?/html/gndy/.*?/\d+/\d+\.html)',t.text)
for j in tmp:
durl=getdownurl(j)
if durl != '':
name = ''.join(durl).split('.')
moivename = (name + '[' + name + name + ']')
dbpf = getdbdata(name)
if dbpf == -1:
print(moivename,'下载地址:'+ durl)
else:
if dbpf > 7.9:
print(moivename,'豆瓣评分:'+ str(dbpf),'下载地址:'+ durl)
def getmoive(id,page):#获取指定版块指定页数的电影下载地址
if id < 3:
pagenum=getpage(url+'1.html')
if pagenum < page:
page=pagenum
for i in range(1,page+1):
tmpurl=getlist(url+str(i)+'.html')
k=0
for j in tmpurl:
downurl=getdownurl(weburl+j)
name=''.join(downurl).split('.')
moivename=(name+'['+name+name+']')
dbpf=getdbdata(name)
if dbpf == -1:
print(moivename,'下载地址:'+ downurl)
else:
print(moivename,'豆瓣评分:'+str(dbpf),'下载地址:'+downurl)
k+=1
else:
getgf(url)
#几个电影版块的URL
url = [ #分类名称 id
'http://www.ygdy8.net/html/gndy/dyzz/list_23_', #最新电影 0
'http://www.ygdy8.net/html/gndy/china/list_4_', #国内电影 1
'http://www.ygdy8.net/html/gndy/oumei/list_7_', #欧美电影 2
'http://www.ygdy8.net/html/gndy/jddy/20160320/50510'#高分经典3
]
if __name__=='__main__':
getmoive(0,3) #getmoive(分类ID,获取页数) ps:每页是25部电影
下面是豆瓣评分查询无限制时的获取结果:
注:代码默认是获取所有电影的豆瓣评分的,但豆瓣评分的查询API有时间限制,我在代码里没有加时间间隔,有需要的自己加一下,再就是如果有更懒的人,就直接用下面的这个吧,简单粗暴。
gunxsword 发表于 2018-12-18 00:08
问一下楼主,这个getmovie的,也是楼主用PYTHON做出来的吗?
不是的,后面的GetMoive是delphi写的 神棍黄小坏 发表于 2019-1-8 15:09
楼主软件提示要更新,然后就打不开了怎么办?
软件版本数据被网站回档了,现已修复 前排,能看清楚! 学习学习。 感谢分享 感谢分享,最近正在学PYTHON,这是超好的学习代码! 问一下楼主,这个getmovie的,也是楼主用PYTHON做出来的吗? 这个可以学习一下不错的文章 感谢楼主分享