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/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值