1. 程式人生 > >Python獲取電影天堂各版塊電影

Python獲取電影天堂各版塊電影

Python獲取電影天堂各版塊電影

 

版本:

Python3.6.5

引用庫:

re,requests,json,lxml

執行效果:

Python獲取電影天堂各版塊電影

 

Python獲取電影天堂各版塊電影

 

程式碼:

#-*-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)[0]
 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"][0]["id"]
 #dbweburl=l["subjects"][0]["alt"]
 if 'code' in l.keys():
 return -1
 else:
 dbpf=l["subjects"][0]["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[5] + '[' + name[6] + name[7] + ']')
 dbpf = getdbdata(name[5])
 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[id]+'1.html')
 if pagenum < page:
 page=pagenum
 for i in range(1,page+1):
 tmpurl=getlist(url[id]+str(i)+'.html')
 k=0
 for j in tmpurl:
 downurl=getdownurl(weburl+j)
 name=''.join(downurl).split('.')
 moivename=(name[5]+'['+name[6]+name[7]+']')
 dbpf=getdbdata(name[5])
 if dbpf == -1:
 print(moivename,'下載地址:'+ downurl)
 else:
 print(moivename,'豆瓣評分:'+str(dbpf),'下載地址:'+downurl)
 k+=1
 else:
 getgf(url[3])
#幾個電影版塊的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部電影

下面是豆瓣評分查詢無限制時的獲取結果:

Python獲取電影天堂各版塊電影

 

注:程式碼預設是獲取所有電影的豆瓣評分的,但豆瓣評分的查詢API有時間限制,我在程式碼裡沒有加時間間隔,有需要的自己加一下,再就是如果有更懶的人,就直接用下面的這個吧,簡單粗暴。

Python獲取電影天堂各版塊電影