爬取豆瓣电影排行榜(评分)

第一步,我们需要爬取豆瓣信息,

第二步,我们需要保存爬取下来的信息,

接下来我们导入模块,

HTTP请求的request模块 和Excel文件处理的 xlwt 模块
还有一个实时间模块,我们爬取的时间不能太快,否则会被网站识别到。

import requests
import xlwt
import time

接下来创建Excel表格并命名:

#创建Excel
excel1 = xlwt.Workbook()
#工作表签sheet1重命名为  豆瓣
sheet1 = excel1.add_sheet('豆瓣', cell_overwrite_ok=True)
#第一个参数0代表第一行,第二个参数代表第一行的第一列,第二列,第三列
sheet1.write(0, 0, '电影名称')
sheet1.write(0, 1, '地区/国家')
sheet1.write(0, 2, '年份')
sheet1.write(0, 3, '评分')
sheet1.write(0, 4, '评价人数')

现在开始获取数据,
分析豆瓣电影的页面,将我们得到的有用信息写入代码,

#定义一个字典data,起始页码start为0,我们改为pn,方便循环其他分页
#通过浏览其他页面我们得知,pn页码的数字不是1,2,3,4,5这样表示,而是通过+20表示:0,20,40,
data  = {
            'start': pn,
            'limit': '20'
        }


headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400',
            'Referer': 'https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=',
            'Cookie':'bid=6nS16u78ysk; douban-fav-remind=1; __utmz=30149280.1536302200.2.2.utmcsr=cn.bing.com|utmccn=(referral)|utmcmd=referral|utmcct=/; ll="118371"; _vwo_uuid_v2=D1979D38657B6548A1BB551C1064F3530|bf98aa297a7ebd3c5226eab14e60b262; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.1052346626.1533889879.1536302200.1538099719.3; __utmc=30149280; __utma=223695111.1669584758.1538099719.1538099719.1538099719.1; __utmb=223695111.0.10.1538099719; __utmc=223695111; __utmz=223695111.1538099719.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ps=y; dbcl2="185126615:6R0mlwkYAeI"; ck=ga0K; push_noty_num=0; push_doumail_num=0; __yadk_uid=KHFgBWW1h7s9vtx9sYMoQeaaZ8e8CNU1; __utmt=1; __utmv=30149280.18512; __utmb=30149280.8.10.1538099719; _pk_id.100001.4cf6=5aa5204a625172c4.1538099719.1.1538100311.1538099719.'
        }
        Requesturl = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={}&limit=20'.format(pn)

        res = requests.get(Requesturl, data=data, headers=headers)
        result = res.json()

这样我们的了一个页电影的所有信息
我们要对信息进行提取,只要我们需要的,提取到需要的后,将信息写入Excel里面,
每页有20条电影信息,我们for 20次得到每个电影的信息信息。

 for i in range(20):
            try:


                job_name = result[i]['title']
                job_name1 = result[i]['regions'][0]
                job_name2 = result[i]['release_date']
                job_name3 = result[i]['score']
                job_name4 = result[i]['vote_count']
                print(job_name)



                sheet1.write(n, 0, job_name)
                sheet1.write(n, 1, job_name1)
                sheet1.write(n, 2, job_name2)
                sheet1.write(n, 3, job_name3)
                sheet1.write(n, 4, job_name4)
                n += 1
                time.sleep(1)  # 爬取一次用时1s
                excel1.save('豆瓣高分电影2.xls')  # 创建excel表格,命名为''
            except:
                pass

最后我们需要做的就是,遍历他每一页的数据,然而我们不知道他有多少页,,
我这边写了10000页,估计没有这么多,不管了。

for pn in range(0,20000,20):

	#将上面代码放入这里面,
	#下面这是循环一次停一秒。不能太快了。
     time.sleep(1)
     #打印目前保存到第几页了,
     print('--------------这是第%s页------------------'%(pn/20))
	
	

全部代码如下,

import requests
import xlwt
import time


excel1 = xlwt.Workbook()
sheet1 = excel1.add_sheet('豆瓣', cell_overwrite_ok=True)
sheet1.write(0, 0, '电影名称')
sheet1.write(0, 1, '地区/国家')
sheet1.write(0, 2, '年份')
sheet1.write(0, 3, '评分')
sheet1.write(0, 4, '评价人数')

n = 1
for pn in range(0,20000,20):

        data  = {
            'start': pn,
            'limit': '20'
        }
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400',
            'Referer': 'https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=',
            'Cookie':'bid=6nS16u78ysk; douban-fav-remind=1; __utmz=30149280.1536302200.2.2.utmcsr=cn.bing.com|utmccn=(referral)|utmcmd=referral|utmcct=/; ll="118371"; _vwo_uuid_v2=D1979D38657B6548A1BB551C1064F3530|bf98aa297a7ebd3c5226eab14e60b262; _pk_ses.100001.4cf6=*; ap_v=0,6.0; __utma=30149280.1052346626.1533889879.1536302200.1538099719.3; __utmc=30149280; __utma=223695111.1669584758.1538099719.1538099719.1538099719.1; __utmb=223695111.0.10.1538099719; __utmc=223695111; __utmz=223695111.1538099719.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ps=y; dbcl2="185126615:6R0mlwkYAeI"; ck=ga0K; push_noty_num=0; push_doumail_num=0; __yadk_uid=KHFgBWW1h7s9vtx9sYMoQeaaZ8e8CNU1; __utmt=1; __utmv=30149280.18512; __utmb=30149280.8.10.1538099719; _pk_id.100001.4cf6=5aa5204a625172c4.1538099719.1.1538100311.1538099719.'
        }
        Requesturl = 'https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start={}&limit=20'.format(pn)

        res = requests.get(Requesturl, data=data, headers=headers,proxies=proxies)
        result = res.json()


        for i in range(20):
            try:


                job_name = result[i]['title']
                job_name1 = result[i]['regions'][0]
                job_name2 = result[i]['release_date']
                job_name3 = result[i]['score']
                job_name4 = result[i]['vote_count']
                print(job_name)



                sheet1.write(n, 0, job_name)
                sheet1.write(n, 1, job_name1)
                sheet1.write(n, 2, job_name2)
                sheet1.write(n, 3, job_name3)
                sheet1.write(n, 4, job_name4)
                n += 1
                time.sleep(1)  # 爬取一次用时1s
                excel1.save('豆瓣高分电影.xls')  # 创建excel表格,命名为''
            except:
                pass
        time.sleep(1)


        print('--------------这是第%s页------------------'%(pn/20))




  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值