爬取豆瓣电影

一、任务描述

  爬取https://movie.douban.com/tag/#/豆瓣电影,选择电影,*,2018年,按评分最高,爬取前200部,保存电影名称,图片链接,和电影评分。

  由于网页是动态加载,每页显示20条,每一页的网址是变化的,需要去网页上查看网址。

  打开网页,进入开发者模式。

爬取豆瓣电影

   右键new_search_subjects,打开一个新的网页,网页以结构化数据的形式显示了当前页面加载的20部电影的详细信息,例如,电影名称,导演,图片,评分等,此时页面的网址就是要爬取时请求的网址。第一页网址中start的值是0,点击加载更多,加载下一页,出现一个新的new_search_subjects,打开,可以发现,网址的start值变成20,其他不变。第三页的start值变成40,其他不变。所以,加载电影时,一次加载20部,网址中只有start的值是变化的,从0开始,每次增加20,其他地方不变。爬取200部电影就是前10页。

爬取豆瓣电影

   从数据中可以发现,电影名称是title字段,图片链接是cover字段,评分是rate字段。

二、代码

#-*-coding:utf-8-*-

import re
import json
import requests

ll = []
for c in range(10): #一页显示20条
    url=r'https://movie.douban.com/j/new_search_subjects?sort=S&range=0,10&tags=电影&start={}&countries=*&year_range=2018,2018'.format(c*20)
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    page=requests.get(url=url,headers=headers).json()
    page_list = []
    for r in range(20):              #每次加载20条
        list=page['data']
        dict=list[r]
        item = {}
        item['name'] = dict['title']    #电影名称
        item['img_src'] = dict['cover']     #图片链接
        item['score']=dict['rate']          #电影评分
        page_list.append(item)
    ll.extend(page_list)
with open("F:/ans.json", 'w', encoding='utf-8') as f:
    json.dump(ll, f,ensure_ascii=False)