爬蟲實戰【11】Python獲取豆瓣熱門電影信息


之前我們從貓眼獲取過電影信息,而且利用分析ajax技術,獲取過今日頭條的街拍圖片。
今天我們在豆瓣上獲取一些熱門電影的信息。

頁面分析

首先,我們先來看一下豆瓣里面選電影的頁面,我們默認選擇熱門電影,啥都不點了。
【插入圖片,豆瓣熱門電影頁面】

在選電影這個框中其實有很多標簽的,這個其實可以在url設置,后面講,現在就用熱門好了。
下面每部電影羅列出來,包括電影封面,評分,電影名稱等信息。
最下面是加載更多選項,其實看到這個加載更多,我就意識到這個頁面肯定是用ajax技術實現的,就跟今日頭條街拍那次一樣,只不過不采用向下滾動,而是點擊按鈕加載的方式。
是不是這樣的?我們看一下源代碼。
果然都是一些js,我就不放圖了,大家自己看一下就好了。
那么來看一下XHR了,果然下面有幾個json文件,哈哈,猜測是正確的。
【插入圖片,XHR分析】

這次的json信息很簡介,一個subjects下面就是各個電影的具體內容了,我們通過json的loads方法,就能夠得到里面的信息了。
仍然是通過requests庫來獲取json信息,消息頭的話,我們來看一下:
【插入圖片,消息頭分析】

這個url的前面部分是固定的,后面是一些參數,我們可以用urlencode來編碼。
如果我們想要加載不同的頁面,只要改變這個url里面的page_start參數就好了
【插入圖片,加載更多】

獲取到某條電影信息后,我們就保存到mongodb數據庫中。

代碼展示

import requests
from urllib.parse import urlencode
import json
import pymongo

'''MONGO設置'''
MONGO_URL = 'localhost'
MONGO_DB = 'douban'
MONGO_Table = '熱門'
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]


def get_movie_page(start_number):
    data = {
        'type': 'movie',
        'tag': '熱門',
        'sort': 'recommend',
        'page_limit': 20,
        'page_start': start_number
    }
    url = 'https://movie.douban.com/j/search_subjects?' + urlencode(data)
    try:
        response = requests.get(url)
        if response.status_code == 200:
            # print(response.text)
            return response.text
    except Exception:
        print('請求出錯!')
        return None


def parse_index_movie(html):
    movie = json.loads(html)
    result = []
    if movie and 'subjects' in movie.keys():
        for item in movie.get('subjects'):
            film = {
                'rate': item.get('rate'),
                'title': item.get('title'),
                'url': item.get('url'),
                'cover': item.get('cover')
            }
            result.append(film)
            save_to_db(film)
    return result


def save_to_db(film):
    try:
        if db[MONGO_Table].insert(film):
            print('保存成功', film)
    except Exception:
        print('保存出錯', film)
        pass


def main():
    for i in range(100):
        html = get_movie_page(i*20)
        parse_index_movie(html)


if __name__ == '__main__':
    main()

【插入圖片,mongo數據】

至此,我們得到了200多部熱門電影的信息,尤其是每部電影的url,有了這個信息,我們就能打開每部電影的評論頁面,獲取到該部電影的短評。
這個留給明天再將。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM