一、任務描述
爬取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)