How Hard You Are
How Special You Are

看250个片儿

将豆瓣电影Top250爬虫,和下载电影的爬虫结合,获取到所有电影的下载链接

import requests,bs4,time
from urllib.request import quote
text = str()
def movielink(movie):
    gbkmovie=movie.encode('gbk')
    #将汉字,用gbk格式编码,赋值给gbkmovie
    urlmovie = quote(gbkmovie)
    try:
    #阳光电影是一个小网站,并不稳定,批量执行程序容易报错终止,所以加一个try语句
        res =requests.get('http://s.ygdy8.com/plus/so.php?kwtype=0&searchtype=title&keyword='+urlmovie)
        bsmovie = bs4.BeautifulSoup(res.text,'html.parser')
        link = bsmovie.select('.co_content8 b a')
        if len(link)==2:
            return '这个电影暂时没有下载资源,不好意思奥~'
        else:
            finallink = 'http://www.ygdy8.com' + link[0].get('href')
            xiazai = requests.get(finallink)
            gbkxiazai = xiazai.content.decode('gbk')
            bsxiazai = bs4.BeautifulSoup(gbkxiazai,'html.parser')
            download = bsxiazai.select('table tbody tr a')
            if len(download)==1:
                return '电影下载链接:\n'+download[0].get('href')
            else:
                return '电影下载链接:\n'+'【1】'+download[1].get('href')+'\n【2】'+download[0].get('href')
    except:
        return '在查找这个电影的下载链接时发生了诡异的报错,所以我推荐你自己寻找它的下载链接。'
def printlist(url):
#爬取网页上的电影名单
    global text
    #这里,涉及到了一个关于函数的知识点,全局变量和局部变量。你可以搜索这个知识
    #这句代码意思是:在函数printlist()内,变量text和函数外的变量text是同个
    list = requests.get(url)
    bslist = bs4.BeautifulSoup(list.text,'html.parser')
    for x in range(25):
    #每页有25个电影
        movie = bslist.select('.grid_view li')[x]
        #查找了当前页面所有的电影,是一个list,list里的第[x]个元素。
        bsmovie = bs4.BeautifulSoup(str(movie),'html.parser')
        #movie是tag对象,但str(movie)就可以作为字符串了。
        num_movie = bsmovie.select('em')
        title_movie = bsmovie.select('a .title')
        mark_movie = bsmovie.select('.rating_num')
        inq_movie = bsmovie.select('.inq')
        link_movie = movielink(title_movie[0].getText())
        if len(inq_movie) != 0:
            text = text+num_movie[0].getText()+'. '+title_movie[0].getText()+'——'+mark_movie[0].getText()+'分\n推荐语:'+inq_movie[0].getText()+'\n'+link_movie+'\n\n'
        else:
            text = text+num_movie[0].getText()+'. '+title_movie[0].getText()+'——'+mark_movie[0].getText()+'分\n推荐语:'+'\n'+link_movie+'\n\n'

def fanye(num):
#写一个翻页的函数,参数是你想查询的电影总数
    page = int(num/25)
    #豆瓣电影每页显示25个,所有相除得到页数
    #除法得到的结果是浮点数,要用int()转换为整数才能range()
    for y in range(page):
        url = 'https://movie.douban.com/top250?start='+str(y*25)
        #这是电影排行榜网址的组成形式
        printlist(url)
        #调用printlist函数
        time.sleep(2)
        #休息两秒钟,防止被反爬虫
num = int(input('你想要输出多少个电影名单?请输入25的整数倍:'))
fanye(num)
#执行爬虫,此时text内有了内容
print(text)
赞(1) 打赏
未经允许不得转载:哪吒博客 » 看250个片儿
分享到: 更多 (0)

评论【支持markdown语法】 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

隐藏