爬虫练习(1)-- 爬取豆瓣最新电影

准备工作

本次爬取的移动手机端的接口。我们可以使用 Google 浏览器自带的调试模式去做切换。可能会出现切换了手机模式,只是变成了一个手机浏览器的形式,不是真正的 移动端接口。一种解决方案是先切换为手机模式,再进入所要爬取的网站。
这里写图片描述

这里写图片描述

我们要提取的信息全部放在 ajax 请求返回的 json 字符串里面,找到相对应的信息即可 …
这里写图片描述

我们可以随意选择自己想要提取的信息 …
这里写图片描述

数量上的目标是把影院热映全部爬取下来…

编写代码

简化后的 url 如下 ,这时候请求不到数据是因为缺少一个 reference 参数 。
这里写图片描述

编码:

# coding:utf-8
import requests
import json

class Douban(object):
    def __init__(self):
        self.headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
            'Referer': 'https://m.douban.com/movie/nowintheater?loc_id=108288',
        }
        self.url = 'https://m.douban.com/rexxar/api/v2/subject_collection/movie_showing/items?start={}&count=10'
        self.offset = 0
        self.file = open('douban.json', 'w')

    def get_data(self,url):
        response = requests.get(url,headers=self.headers)
        return response.content

    def parse_date(self, data):
        # 将 bytes 类型转化为 str 类型
        str_data = data.decode()
        # 将 json 格式转为 python 中的字典
        dict_str = json.loads(str_data)
        # 取出字典中的含有所需提取内容的列表
        movie_list = dict_str.get("subject_collection_items", None)

        # print(movie_list)

        # movie_list 里面的每一项
        # {'uri': 'douban://douban.com/movie/27605698',
        #  'cover': {'width': 570, 'url': 'https://img1.doubanio.com/view/photo/m_ratio_poster/public/p2529206747.jpg',
        #            'height': 950, 'shape': 'rectangle'}, 'subtype': '', 'directors': ['闫非'],
        #  'url': 'https://www.douban.com/doubanapp/dispatch?uri=/movie/27605698/', 'title': '西虹市首富', 'reviewer_name': '',
        #  'card_subtitle': '2018 / 中国大陆 / 喜剧 / 闫非 彭大魔 / 沈腾 宋芸桦', 'release_date': '07.27', 'forum_info': None,
        #  'date': None, 'type': 'movie', 'rating': {'max': 10, 'count': 71226, 'value': 6.9}, 'price': None,
        #  'null_rating_reason': '', 'has_linewatch': False, 'original_price': None, 'description': '', 'id': '27605698',
        #  'actions': [], 'label': None, 'info': '中国大陆 / 喜剧 / 闫非 / 沈腾 宋芸桦', 'actors': ['沈腾', '宋芸桦', '张一鸣'],
         # 'year': '2018'}

        res_list = []
        for dict_ in movie_list:
            temp_dict = {}
            temp_dict['url'] = dict_.get('url', None)
            temp_dict['info'] = dict_.get('info', None)
            temp_dict['actors'] = dict_.get('actors', None)
            res_list.append(temp_dict)
        return res_list

    def save_data(self, data_list):
        for data in data_list:
            str_data = json.dumps(data, ensure_ascii=False) + ',\n'
            self.file.write(str_data)

    def __del__(self):
        self.file.close()

    def run(self):
        while True:
            data_ = self.get_data(self.url.format(self.offset))
            res_list = self.parse_date(data_)
            self.save_data(res_list)
            self.offset += 10
            if res_list == []:
                break

if __name__ == "__main__":
    douban = Douban()
    douban.run()

douban.json

{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/27605698/", "info": "中国大陆 / 喜剧 / 闫非 / 沈腾 宋芸桦", "actors": ["沈腾", "宋芸桦", "张一鸣"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/25882296/", "info": "中国大陆 香港 / 动作 悬疑 古装 / 徐克 / 赵又廷 冯绍峰", "actors": ["赵又廷", "冯绍峰", "林更新"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26804147/", "info": "美国 / 动作 惊悚 冒险 / 罗森·马歇尔·瑟伯 / 道恩·强森 内芙·坎贝尔", "actors": ["道恩·强森", "内芙·坎贝尔", "黄经汉"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26752088/", "info": "中国大陆 / 剧情 喜剧 / 文牧野 / 徐峥 王传君", "actors": ["徐峥", "王传君", "周一围"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/30146756/", "info": "中国大陆 / 动画 奇幻 / 刘阔 / 路知行 阎萌萌", "actors": ["路知行", "阎萌萌", "褚珺"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26253783/", "info": "美国 西班牙 中国大陆 韩国 香港 / 喜剧 动画 奇幻 / 托尼·班克罗夫特 / 艾米莉·布朗特 约翰·卡拉辛斯基", "actors": ["艾米莉·布朗特", "约翰·卡拉辛斯基", "伊恩·麦克莱恩"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26366496/", "info": "中国大陆 / 剧情 喜剧 动作 / 姜文 / 彭于晏 廖凡", "actors": ["彭于晏", "廖凡", "姜文"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/30208005/", "info": "中国大陆 / 动画 / 王云飞 / 阎么么 赵一博", "actors": ["阎么么", "赵一博", "张磊"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/30198729/", "info": "中国大陆 / 儿童 动画 冒险 / 何澄 / 刘纯燕 董浩", "actors": ["刘纯燕", "董浩", "鞠萍"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26416062/", "info": "美国 西班牙 / 动作 科幻 冒险 / 胡安·安东尼奥·巴亚纳 / 克里斯·帕拉特 布莱丝·达拉斯·霍华德", "actors": ["克里斯·帕拉特", "布莱丝·达拉斯·霍华德", "贾斯蒂斯·史密斯"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/25849049/", "info": "美国 / 喜剧 动作 动画 / 布拉德·伯德 / 格雷格·T·尼尔森 霍利·亨特", "actors": ["格雷格·T·尼尔森", "霍利·亨特", "莎拉·沃威尔"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26660063/", "info": "英国 美国 / 喜剧 动画 冒险 / 约翰·斯蒂文森 / 詹姆斯·麦卡沃伊 艾米莉·布朗特", "actors": ["詹姆斯·麦卡沃伊", "艾米莉·布朗特", "约翰尼·德普"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26754880/", "info": "台湾 / 儿童 奇幻 冒险 / 李权峰 / 李昂霖 林奕勋", "actors": ["李昂霖", "林奕勋", "刘书宏"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26290410/", "info": "中国大陆 / 爱情 动画 / 奚超 / ", "actors": []},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26930056/", "info": "美国 / 喜剧 冒险 / 拉加·高斯内尔 / 威尔·阿奈特 卢达克里斯", "actors": ["威尔·阿奈特", "卢达克里斯", "斯坦利·图齐"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26925317/", "info": "中国大陆 / 剧情 动作 冒险 / 韩延 / 李易峰 迈克尔·道格拉斯", "actors": ["李易峰", "迈克尔·道格拉斯", "周冬雨"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/27079318/", "info": "中国大陆 / 剧情 / 蔡成杰 / 田天 温新宇", "actors": ["田天", "温新宇"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/30227725/", "info": "中国大陆 香港 / 喜剧 动画 冒险 / 叶伟青  / ", "actors": []},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/1305564/", "info": "香港 / 喜剧 / 杜琪峰 / 周润发 黄百鸣", "actors": ["周润发", "黄百鸣", "张学友"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/30235134/", "info": "中国大陆 / 惊悚 恐怖 / 张跃斌 / 韩素媛 蓝波", "actors": ["韩素媛", "蓝波", "庞贝童"]},
{"url": "https://www.douban.com/doubanapp/dispatch?uri=/movie/26988003/", "info": "香港 中国大陆 / 剧情 喜剧 / 陈友 / 陈家乐 于湉", "actors": ["陈家乐", "于湉", "王梓轩"]},

这样就爬取了当前影院最新的21部电影 ……

联系方式

qq: 2564493603
欢迎交流 - -

猜你喜欢

转载自blog.csdn.net/Enjolras_fuu/article/details/81272161