目标
看电影总是没什么目标,又想看一些经典的电影,于是找到豆瓣根据用户评分,按照一定算法给出的电影top250,每当看电影之前,都要先寻找一番,恐怖片不看,音乐片不看,爱情片不看(单身狗伤不起,╮(╯_╰)╭),看之前总要先看简介,看完之后又想看影评,恰恰这些又都是很有价值的,那不如都爬下来吧!
这些电影都很值得看哦,绝对不骗你。
另外还推荐个IMDB网站给出的电影排行榜:http://www.imdb.cn/IMDB250/
步骤
1. 发起http请求,获取页面
2. 解析html页面
3. 保存到mysql数据库
第三方库
requests http://cn.python-requests.org/zh_CN/latest/
BeautifulSoup4 https://www.crummy.com/software/BeautifulSoup/
pymysql (pip install pymysql)
安装过程就不细说了,网上一搜一大堆
声明
本人才刚学Python不到三天,这些库也都是第一次听说,代码写的比较丑,请谨慎考虑是否要继续看下去,如您在观看的过程中有任何不适,作者可不负责哦
每部电影基本模板
<div class="item"> <div class="pic"> <em class="">1</em> <a href="https://movie.douban.com/subject/1292052/"> <img alt="肖申克的救赎" class="" src="https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg"> </img> </a> </div> <div class="info"> <div class="hd"> <a class="" href="https://movie.douban.com/subject/1292052/"> <span class="title">肖申克的救赎</span> <span class="title"> / The Shawshank Redemption</span> <span class="other"> / 月黑高飞(港) / 刺激1995(台)</span> </a> <span class="playable">[可播放]</span> </div> <div class="bd"> <p class=""> 导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /... <br> 1994 / 美国 / 犯罪 剧情 </br> </p> <div class="star"> <span class="rating5-t"></span> <span class="rating_num" property="v:average">9.6</span> <span content="10.0" property="v:best"></span> <span>767397人评价</span> </div> <p class="quote"> <span class="inq">希望让人自由。</span> </p> </div> </div> </div>
Code
""" @author: jtusta @license: MIT Licence @contact: root@jtahstu.com @site: www.jtahstu.com @software: PyCharm Community Edition @file: getMovies.py @time: 2017/01/08 18:35 """ import requests from bs4 import BeautifulSoup import pymysql import pymysql.cursors import time def getMovies(movieUrl): html = requests.get(movieUrl) soup = BeautifulSoup(html.text, "html.parser") items = soup.select(".item") for item in items: # 排名 rank = item.em.text # 详情页 detailUrl = item.a.get("href") # 标题 titles = item.select(".title") title = titles[0].text.strip() title2 = "" if len(titles) > 1: title2 = item.select(".title")[1].text.strip().replace("/", "") titleOther = item.select(".other")[0].text.strip().replace("/", "") bd = item.p.text.strip().split("\n") # 人物 people = bd[0].strip() # 类型 type = bd[1].strip() # 评分 ratingNum = item.select(".star span")[1].text # 评价数 evalNum = item.select(".star span")[3].text.replace("人评价", "") # 引述 quote = "" if len(item.select(".inq")) > 0: quote = item.select(".inq")[0].text.strip() connection = pymysql.connect(host='localhost', user='root', password='pass', db='test', port=3306, charset='utf8') cursor = connection.cursor() sql = 'INSERT into douban_movie_top250(rank,detail_url,title,title2,title_other,people,type,rating_num,eval_num,quote) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' cout = cursor.execute(sql, ( int(rank), detailUrl, title, title2, titleOther, people, type, float(ratingNum), int(evalNum), quote)); connection.commit() cursor.close() connection.close() print("rank %s : %s , is ok !" % (rank, title)) for i in range(0, 10): print("正在抓取第 %d 页" % i) movieUrl = "https://movie.douban.com/top250?start=" + str(i * 25) getMovies(movieUrl) time.sleep(2)
执行过程
正在抓取第 0 页 rank 1 : 肖申克的救赎 , is ok ! rank 2 : 这个杀手不太冷 , is ok ! rank 3 : 霸王别姬 , is ok ! rank 4 : 阿甘正传 , is ok ! rank 5 : 美丽人生 , is ok ! rank 6 : 千与千寻 , is ok ! rank 7 : 辛德勒的名单 , is ok ! rank 8 : 泰坦尼克号 , is ok ! rank 9 : 盗梦空间 , is ok ! rank 10 : 海上钢琴师 , is ok ! rank 11 : 机器人总动员 , is ok ! rank 12 : 三傻大闹宝莱坞 , is ok ! rank 13 : 放牛班的春天 , is ok ! rank 14 : 忠犬八公的故事 , is ok ! rank 15 : 大话西游之大圣娶亲 , is ok ! rank 16 : 龙猫 , is ok ! rank 17 : 教父 , is ok ! rank 18 : 乱世佳人 , is ok ! rank 19 : 楚门的世界 , is ok ! rank 20 : 天堂电影院 , is ok ! rank 21 : 当幸福来敲门 , is ok ! rank 22 : 搏击俱乐部 , is ok ! rank 23 : 触不可及 , is ok ! rank 24 : 十二怒汉 , is ok ! rank 25 : 指环王3:王者无敌 , is ok ! 正在抓取第 1 页 rank 26 : 无间道 , is ok ! rank 27 : 怦然心动 , is ok ! rank 28 : 罗马假日 , is ok ! rank 29 : 天空之城 , is ok ! rank 30 : 熔炉 , is ok ! rank 31 : 少年派的奇幻漂流 , is ok ! rank 32 : 大话西游之月光宝盒 , is ok ! rank 33 : 两杆大烟枪 , is ok ! rank 34 : 飞屋环游记 , is ok ! rank 35 : 鬼子来了 , is ok ! rank 36 : 蝙蝠侠:黑暗骑士 , is ok ! rank 37 : 飞越疯人院 , is ok ! rank 38 : 窃听风暴 , is ok ! rank 39 : 海豚湾 , is ok ! rank 40 : 活着 , is ok ! rank 41 : 星际穿越 , is ok ! rank 42 : V字仇杀队 , is ok ! rank 43 : 闻香识女人 , is ok ! rank 44 : 美丽心灵 , is ok ! rank 45 : 教父2 , is ok ! rank 46 : 指环王2:双塔奇兵 , is ok ! rank 47 : 指环王1:魔戒再现 , is ok ! rank 48 : 天使爱美丽 , is ok ! rank 49 : 哈尔的移动城堡 , is ok ! rank 50 : 情书 , is ok ! 正在抓取第 2 页 rank 51 : 死亡诗社 , is ok ! rank 52 : 美国往事 , is ok ! rank 53 : 七宗罪 , is ok ! rank 54 : 钢琴家 , is ok ! rank 55 : 狮子王 , is ok ! rank 56 : 勇敢的心 , is ok ! rank 57 : 剪刀手爱德华 , is ok ! rank 58 : 致命魔术 , is ok ! rank 59 : 被嫌弃的松子的一生 , is ok ! rank 60 : 音乐之声 , is ok ! rank 61 : 小鞋子 , is ok ! rank 62 : 辩护人 , is ok ! rank 63 : 低俗小说 , is ok ! rank 64 : 入殓师 , is ok ! rank 65 : 饮食男女 , is ok ! rank 66 : 蝴蝶效应 , is ok ! rank 67 : 沉默的羔羊 , is ok ! rank 68 : 本杰明·巴顿奇事 , is ok ! rank 69 : 控方证人 , is ok ! rank 70 : 黑客帝国 , is ok ! rank 71 : 玛丽和马克思 , is ok ! rank 72 : 拯救大兵瑞恩 , is ok ! rank 73 : 西西里的美丽传说 , is ok ! rank 74 : 幽灵公主 , is ok ! rank 75 : 心灵捕手 , is ok ! 正在抓取第 3 页 rank 76 : 第六感 , is ok ! rank 77 : 素媛 , is ok ! rank 78 : 阳光灿烂的日子 , is ok ! rank 79 : 大鱼 , is ok ! rank 80 : 让子弹飞 , is ok ! rank 81 : 射雕英雄传之东成西就 , is ok ! rank 82 : 阳光姐妹淘 , is ok ! rank 83 : 大闹天宫 , is ok ! rank 84 : 春光乍泄 , is ok ! rank 85 : 上帝之城 , is ok ! rank 86 : 重庆森林 , is ok ! rank 87 : 禁闭岛 , is ok ! rank 88 : 甜蜜蜜 , is ok ! rank 89 : 致命ID , is ok ! rank 90 : 告白 , is ok ! rank 91 : 一一 , is ok ! rank 92 : 萤火虫之墓 , is ok ! rank 93 : 加勒比海盗 , is ok ! rank 94 : 爱在黎明破晓前 , is ok ! rank 95 : 风之谷 , is ok ! rank 96 : 阿凡达 , is ok ! rank 97 : 爱在日落黄昏时 , is ok ! rank 98 : 断背山 , is ok ! rank 99 : 侧耳倾听 , is ok ! rank 100 : 布达佩斯大饭店 , is ok ! 后面......省略了......
数据库结构
CREATE TABLE `douban_movie_top250` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '排名', `rank` int(11) DEFAULT NULL, `detail_url` varchar(255) DEFAULT NULL COMMENT '详情页', `title` varchar(255) DEFAULT NULL COMMENT '标题', `title2` varchar(255) DEFAULT NULL COMMENT '标题2', `title_other` varchar(255) DEFAULT NULL COMMENT '其他标题', `people` varchar(255) DEFAULT NULL COMMENT '人物', `type` varchar(255) DEFAULT NULL, `rating_num` float(11,1) DEFAULT NULL COMMENT '评分', `eval_num` int(11) DEFAULT NULL COMMENT '评价人数', `quote` varchar(255) DEFAULT NULL COMMENT '引述', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
数据库截图

完整表数据下载:douban_movie_top250.sql
总结
ok,到此结束,后面会继续爬详情页,然后爬影评啊什么的,敬请期待
哦,还有一个豆瓣读书Top250,后面也会爬下来
---
本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,转载必须注明作者和本文链接。
---
发表评论