null119 发表于 2018-12-17 23:13

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有时间限制,我在代码里没有加时间间隔,有需要的自己加一下,再就是如果有更懒的人,就直接用下面的这个吧,简单粗暴。







null119 发表于 2018-12-18 08:33

gunxsword 发表于 2018-12-18 00:08
问一下楼主,这个getmovie的,也是楼主用PYTHON做出来的吗?

不是的,后面的GetMoive是delphi写的

null119 发表于 2019-1-8 16:32

神棍黄小坏 发表于 2019-1-8 15:09
楼主软件提示要更新,然后就打不开了怎么办?

软件版本数据被网站回档了,现已修复

sp21000 发表于 2018-12-17 23:25

前排,能看清楚!

Alone记忆 发表于 2018-12-17 23:39

学习学习。

29733402 发表于 2018-12-17 23:40

感谢分享

gunxsword 发表于 2018-12-18 00:04

感谢分享,最近正在学PYTHON,这是超好的学习代码!

gunxsword 发表于 2018-12-18 00:08

问一下楼主,这个getmovie的,也是楼主用PYTHON做出来的吗?

lf1314 发表于 2018-12-18 00:44

pjchangew 发表于 2018-12-18 01:17

成国大吉大利 发表于 2018-12-18 01:51

这个可以学习一下不错的文章

mzhsohu 发表于 2018-12-18 02:16

感谢楼主分享
页: [1] 2 3 4 5 6 7
查看完整版本: python获取电影天堂各版块电影