Python爬取豆瓣动作电影好评前100名

获取豆瓣动作电影好评前100名

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=40&limit=20
import urllib2
import json
import re


class DBSpider(object):
    """豆瓣电影爬虫"""

    def __init__(self):
        """初始化请求参数"""
        self.url = "https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=100"
        self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}

    def send_request(self, url):
        """发送请求类"""
        request = urllib2.Request(url=url, headers=self.headers)
        response = urllib2.urlopen(request)
        return response.read()

    def write_file(self, data):
        """将请求结果写入文件"""
        with open(u'豆瓣动作电影评分排名前100.txt', 'a') as f:
            f.write(data)

    def get_detail_data(self, url):
        data = self.send_request(url)
        release_data_list = [match[0] for match in
                             re.findall(r'<span property="v:initialReleaseDate" content="(.*?)">(.*?)</span>', data)]
        release_data = "/".join(release_data_list)
        runtime = re.search(r'<span property="v:runtime" content="(.*)">', data).group(1)
        return release_data, runtime

    def format_data(self, data):
        data_list = json.loads(data)
        for index, data in enumerate(data_list, 1):
            title = data["title"].encode("utf-8")
            url = data["url"].encode("utf-8")
            try:
                release_data, runtime = self.get_detail_data(url)
            except Exception as e:
                release_data, runtime = "", ""
                print(e)
            score = data["score"].encode("utf-8")
            actors_list = data["actors"]
            actors = "/".join(actors_list).encode("utf-8")
            regions_list = data["regions"]
            regions = "/".join(regions_list).encode("utf-8")
            types_list = data["types"]
            types = "/".join(types_list).encode("utf-8")
            str_for_write = """
 NO.%d
 片名:%s
 地址:%s
 评分:%s
 主演:%s
 国家:%s
 类型:%s
 片长:%s
 上映时间:%s
 """ \
                            % (index, title, url, score, actors, regions, types, runtime, release_data)
            self.write_file(str_for_write)
            print("正在获取第%d个数据……" % index)

    def run(self):
        """启动方法"""
        data = self.send_request(self.url)
        self.format_data(data)


if __name__ == '__main__':
    dou_ban_spider = DBSpider()
    dou_ban_spider.run()


获取的结果


NO.1
 片名:这个杀手不太冷
 地址:https://movie.douban.com/subject/1295644/
 评分:9.4
 主演:让·雷诺/娜塔莉·波特曼/加里·奥德曼/丹尼·爱罗/彼得·阿佩尔/迈克尔·巴达鲁科/艾伦·格里尼/伊丽莎白·瑞根/卡尔·马图斯维奇/弗兰克·赛格/麦温/乔治·马丁/罗伯特·拉萨多/亚当·布斯奇/马里奥·托迪斯科/萨米·纳塞利
 国家:法国
 类型:剧情/动作/犯罪
 片长:110
 上映时间:1994-09-14(法国)

 NO.2
 片名:七武士
 地址:https://movie.douban.com/subject/1295399/
 评分:9.2
 主演:三船敏郎/志村乔/稻叶义男/宫口精二/千秋实/加东大介/木村功
 国家:日本
 类型:动作/冒险/剧情
 片长:160
 上映时间:1954-04-26(日本)

 NO.3
 片名:指环王3:王者无敌
 地址:https://movie.douban.com/subject/1291552/
 评分:9.1
 主演:维果·莫腾森/伊利亚·伍德/西恩·奥斯汀/丽芙·泰勒/伊恩·麦克莱恩/奥兰多·布鲁姆/凯特·布兰切特/米兰达·奥图/安迪·瑟金斯/雨果·维文/多米尼克·莫纳汉/比利·博伊德/马尔顿·索克斯/卡尔·厄本/克里斯托弗·李/约翰·瑞斯-戴维斯
 国家:美国/新西兰
 类型:剧情/动作/奇幻/冒险
 片长:201
 上映时间:2004-03-12(中国大陆)/2003-12-17(美国)

猜你喜欢

转载自blog.csdn.net/lynnyq/article/details/79389098