美文网首页码农的世界程序员
Python获取电影天堂各版块电影

Python获取电影天堂各版块电影

作者: b4a0155c6514 | 来源:发表于2019-01-03 10:53 被阅读3次
    Python获取电影天堂各版块电影

    版本:

    Python3.6.5

    引用库:

    re,requests,json,lxml

    运行效果:

    Python获取电影天堂各版块电影 Python获取电影天堂各版块电影

    代码:

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">#--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部电影
    </pre>

    下面是豆瓣评分查询无限制时的获取结果:

    Python获取电影天堂各版块电影

    注:代码默认是获取所有电影的豆瓣评分的,但豆瓣评分的查询API有时间限制,我在代码里没有加时间间隔,有需要的自己加一下,再就是如果有更懒的人,就直接用下面的这个吧,简单粗暴。

    Python获取电影天堂各版块电影

    相关文章

      网友评论

        本文标题:Python获取电影天堂各版块电影

        本文链接:https://www.haomeiwen.com/subject/jyffrqtx.html