python爬蟲獲取豆瓣正在熱播電影

熱播地址:https://movie.douban.com/cinema/nowplaying/beijing/

1、使用瀏覽器查看html文件

找到熱播電影的標籤文件

查看tag,可以看到最開始的tag爲li

2、HTMLPaser

主要用來解析HTTP數據,其中有幾個接口

  • feed: 向解析器喂數據,可以分段提供
  • handler_starttag: 處理html的開始標籤
    • .tag:標籤名稱
    • .attrs:屬性列表
  • handler_data:處理標籤裏的數據體
    • Data:數據文本

3、代碼分析

環境:Python 2.7,win10

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

import urllib2

from HTMLParser import HTMLParser


class MovieParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)  # 調用父類的構造函數
        self.movies = []  # 定義一個數組來儲解析出來的電影

    def handle_starttag(self, tag, attrs):  # 重載handle_starttag方法,這個方法就可以去解析li這個數據
        def _attr(attrlist, attrname):  # 定義一個函數來解析這個屬性
            for attr in attrlist:  # 從屬性列表裏面取出對應列表的值
                if attr[0] == attrname:  # 如果這個傳進來的屬性名稱和這個要求的名稱一樣
                    return attr[1]  # 返回屬性值
            return None
       # 如果要爬取即將上映的電影時,data-category爲upcoming
        if tag == 'li' and _attr(attrs, 'data-title') and _attr(attrs, 'data-category') == 'nowplaying':
            movie = {}

            movie['title'] = _attr(attrs, 'data-title')  # 電影名稱

            movie['score'] = _attr(attrs, 'data-score')  # 電影分數

            movie['director'] = _attr(attrs, 'data-director')  # 電影導演

            movie['actors'] = _attr(attrs, 'data-actors')  # 電影演員

            self.movies.append(movie)  # 提取出來後放到列表裏面

            print('%(title)s|%(score)s|%(director)s|%(actors)s' % movie)


def nowplaying_movie(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36'}  # 模擬一個瀏覽器的行爲
    req = urllib2.Request(url, headers=headers)
    s = urllib2.urlopen(req)
    paser = MovieParser()
    paser.feed(s.read())
    s.close()
    return paser.movies


url = 'https://movie.douban.com/cinema/nowplaying/beijing/'
movies = nowplaying_movie(url)

運行結果

嫌疑人X的獻身|6.6|蘇有朋|王凱 / 張魯一 / 林心如
金剛:骷髏島|6.9|喬丹·沃格特-羅伯茨|湯姆·希德勒斯頓 / 布麗·拉爾森 / 塞繆爾·傑克遜
非凡任務|6.6|麥兆輝 潘耀明|黃軒 / 段奕宏 / 郎月婷
綁架者|5.3|徐靜蕾|白百何 / 黃立行 / 明道
冰雪大作戰|6.2|讓-弗朗索瓦·波略特 弗蘭克·布里森|安吉拉·嘉魯皮 / 瑪麗歐·沃爾夫 / 露辛達·戴維斯
美女與野獸|7.4|比爾·康頓|艾瑪·沃森 / 丹·史蒂文斯 / 盧克·伊萬斯
有完沒完|5.7|王嘯坤|範偉 / 賈靜雯 / 劉俊昊
一條狗的使命|7.7|拉斯·霍爾斯道姆|布麗特·羅伯森 / 丹尼斯·奎德 / 佩吉·利普頓
八月|7.3|張大磊|孔維一 / 張晨 / 郭燕芸
歡樂喜劇人|2.6|黎繼強|郭德綱 / 岳雲鵬 / 羅溫·艾金森
怨靈宿舍之白紙女生|0|陸詩雷|謝容兒 / 薇拉貝兒 / 姚雨鑫
歡樂好聲音|8.2|加斯·詹寧斯 克里斯托夫·盧爾德萊|馬修·麥康納 / 瑞茜·威瑟斯彭 / 塞思·麥克法蘭
金剛狼3:殊死一戰|8.3|詹姆斯·曼高德|休·傑克曼 / 帕特里克·斯圖爾特 / 達芙妮·基恩
愛樂之城|8.4|達米恩·查澤雷|瑞恩·高斯林 / 艾瑪·斯通 / 約翰·傳奇
麥兜響噹噹|7.4|謝立文|黃渤 / 黃秋生 / 吳君如
極限特工3:終極迴歸|5.8|D·J·卡盧索|範·迪塞爾 / 甄子丹 / 迪皮卡·帕度柯妮
領袖1935|2.5|周琦 馬德林|王暉 / 劉勁 / 吳京安
碟仙詭譚2|3.2|雷宇揚|張韶涵 / 方力申 / 惠英紅
喚愛|0|王焮|楊欣 / 張博翔 / 李松珂
夜色撩人|5.0|夏鋼|王千源 / 余男 / 南宮珉
霸王別姬|9.5|陳凱歌|張國榮 / 張豐毅 / 鞏俐
樂高蝙蝠俠大電影|8.1|克里斯·麥凱|威爾·阿奈特 / 羅莎里奧·道森 / 拉爾夫·費因斯
豬豬俠之英雄豬少年|4.8|陸錦明 鍾裕|易烊千璽 / 陳軼 / 張子琨
點五步|6.4|陳志發|林耀聲 / 鬍子彤 / 廖啓智

參考http://www.maiziedu.com/wiki/crawler/example/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章