末世苍雪

root@jtahstu.com   Github  

最新碎语:这个M1 MBP, PHP多版本环境装的我极度崩溃, 历时4个小时终于搞定了. 1. brew转不了7.x的环境, 默认只能装8.1, 恶心. 2. Nginx装上了, 但是请求转发不到php-fpm上, 试了各种配置都不行, 删掉Nginx转战Apache, 吐了. 3. 系统自带httpd, brew能装上httpd但搞死启动不了httpd, 只能手动启动和关闭httpd, 无语. 4. 以上问题都解决后, 加上自己写的启动和关闭脚本, 目前能正常跑起来PHP文件了, 开心! 为啥目前没有开源好用的M1 MNMP环境哇, o(≧口≦)o

您的位置:末世苍雪 >笔记> Python爬虫 之 抓取豆瓣电影Top250

Python爬虫 之 抓取豆瓣电影Top250

目标

看电影总是没什么目标,又想看一些经典的电影,于是找到豆瓣根据用户评分,按照一定算法给出的电影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/

pymysqlpip 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中国大陆许可协议 进行许可,转载必须注明作者和本文链接。

---

二维码加载中...

扫一扫移动端访问O(∩_∩)O

发表评论

28 + 34 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交
正在加载中……