Python爬去天堂电影信息

189 阅读3分钟
from lxml import etree


url = 'https://www.ygdy8.net/html/gndy/dyzz/list_23_'
proxy={"http":"49.85.112.173:7890"}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.8031 SLBChan/28"
            }

# 定义一个电影字典,把电影信息加到字典中
movie = {}

def get_page(url):
    x=int(input('请输入要或许的页面数量'))
    x=x+1
    print('正在请求')

    #循环出链接,依次循环交给get_href
    for i in range(0, x):
        urls = url + str(i) + '.html'
        get_href(urls)


def get_href(url):
    #请求网页信息,并进行编码
    response = requests.get(url=url, headers=headers)
    text = response.content.decode('gbk')
    #请求出网页信息中所有的电影链接
    html = etree.HTML(text)
    hrefs = html.xpath("//div[@class='co_content8']/ul//table//a/@href")
    #循环出所有链接的单个链接
    for href in hrefs:
        href = 'https://www.ygdy8.net' + href
        #打印电影链接
        print('链接:',href)
        #调用pares_url循环传入单个链接
        pares_url(href)


def pares_url(url):
    #请求电影链接的网页信息并进行编码
    response = requests.get(url, headers=headers,proxies=proxy)
    text = response.content.decode('gbk')
    html = etree.HTML(text)
    #选取所有的信息
    #所有信息content是全部的信息,以列表的方式返回。
    # 所以需要用下面的方法找出需要的信息
    title = html.xpath("//font[@color='#07519a']/text()")[0]
    content = html.xpath("//div[@id='Zoom']//text()")

    

    '''
    循环所有信息里的单个信息
    neumerate()设置index下标-------循环字典的一种方式
    startswith()------以什么字符串开始
    replace()-------替换字符
    strip()---------删除两边空格
    '''

    for index, con in enumerate(content):

        if con.startswith('◎译  名'):
            译名 = con.replace('◎译  名', '').strip()
            movie['译名'] = 译名

        if con.startswith('◎片  名'):
            片名 = con.replace('◎片  名', '').strip()
            movie['片名'] = 片名

        if con.startswith('◎年  代'):
            年代 = con.replace('◎年  代', '').strip()
            movie['年代'] = 年代

        if con.startswith('◎产  地'):
            产地 = con.replace('◎产  地', '').strip()
            movie['产地'] = 产地

        if con.startswith('◎类  别'):
            类别 = con.replace('◎类  别', '').strip()
            movie['类别'] = 类别

        if con.startswith('◎语  言'):
            语言 = con.replace('◎语  言', '').strip()
            movie['语言'] = 语言

        if con.startswith('◎字  幕'):
            字幕 = con.replace('◎字  幕', '').strip()
            movie['字幕'] = 字幕

        if con.startswith('◎上映日期'):
            上映日期 = con.replace('◎上映日期', '').strip()
            movie['上映日期'] = 上映日期

        if con.startswith('◎IMDb评分'):
            IMDb评分 = con.replace('◎IMDb评分', '').strip()
            movie['IMDb评分'] = IMDb评分

        if con.startswith('◎豆瓣评分'):
            豆瓣评分 = con.replace('◎豆瓣评分', '').strip()
            movie['豆瓣评分'] = 豆瓣评分

        if con.startswith('◎片  长'):
            片长 = con.replace('◎片  长', '').strip()
            movie['片长'] = 片长

        if con.startswith('◎导  演'):
            导演 = con.replace('◎导  演', '').strip()
            movie['导演'] = 导演

        if con.startswith('◎编  剧'):
            编剧 = con.replace('◎编  剧', '').strip()
            movie['编剧'] = 编剧

        #主演有好几个演员,而单个演员的信息在一个列表中
        #所有要拿出全部的演员就要用当前信息的后面的信息
        #也就是当前列表后的列表,所以用index下标的方式找出
        if con.startswith('◎主  演'):
            主演 = con.replace('◎主  演', '').strip()
            #创建演员列表,并加入当前演员信息
            zhuyans = [主演]
            #循环获取下标的信息,
            for i in range(index + 1, len(content)):
                # 如果信息是以◎开始,那也就是下标信息到下一内容那么就跳出循环
                if content[i].startswith('◎标'):
                    break
                #把循环的信息加入列表中
                zhuyans.append(content[i].strip())
            movie['主演'] = zhuyans

        if con.startswith('◎标  签'):
            标签 = con.replace('◎标  签', '').strip()
            movie['标签'] = 标签

        # 和演员列表逻辑一样
        if con.startswith('◎简  介'):
            简介 = con.replace('◎简  介', '').strip()
            jj = []
            for i in range(index+1,len(content)):
                if content[i].startswith('◎'):
                    break
                if content[i].startswith('磁力'):
                    break
                jj.append(content[i].strip())
            movie['简介']=jj

        #逻辑和演员列表一样
        if con.startswith('◎获奖情况'):
            获奖情况 = con.replace('◎获奖情况', '').strip()
            hjqk = [获奖情况]
            for i in range(index+1,len(content)):
                if content[i].startswith("磁力链"):
                    break
                hjqk.append(content[i].strip())
            movie['获奖情况'] = hjqk

    #循环出movie字典中的键值并打印出来
    for mov, value in movie.items():
        print(mov, ':', value)
    #打印*号区分内容
    print('*'*100)


if __name__ == '__main__':
    get_page(url)