1. 我们扒到了什么?

id, 名称, 上映年份,上映日期,所属类目, 导演,主演,片长,评分,星评,评价人数

2. 把这些数据做一个分类。

a..基本信息 :名称, 导演,上映年份, 所属类目, 片长

b.评价信息:评分,星评,评价人数

c.主演表: 主演(我在纠结要不要单独列一张表)

3 .表设计。现在有点蛋疼的是主键。用自增主键还是电影id做主键。经过我的多方面考虑,我慎重(草率)地决定,用电影id(反正都要建唯一索引,为什么不拿来当主键呢。。), 所以我刚才又在id那转了一下数据

m_id = re.search("[0-9]+", movie_url).group()

movie["id"] = int(m_id)

写着玩嘛,就是那么随意,有什么想法就改!!!

4. 建表。。也是蛋疼,我居然纠结过是用mysql还是mongodb, 马上就删自己一个耳光,你会mongodb嘛?感觉要是继续又开一个mongodb的坑,我就再也回不来这个爬虫了。

我也不傻不拉几地自己写建表sql了.直接用的SQLyog。稍微纠结了一下InnoDB和MyISAM。 我开始是想每次把一个电影的信息分别插入三个表,要不要用事务, 又想垃圾数据也不会扣我钱,所以用了MyISAM。毕竟就是大量的Insert和select

建表语句

CREATE DATABASE`douban`;USE`douban`;--基本信息表

CREATE TABLE`t_movie_info` (

`id`bigint(20) unsigned NOT NULL COMMENT '主键,豆瓣电影id',

`type`tinyint(4) DEFAULT NULL COMMENT '类型 0:电视剧,1:电影',

`name`varchar(30) DEFAULT NULL COMMENT '电影名字',

`director`varchar(50) DEFAULT NULL COMMENT '导演',

`year` int(4) DEFAULT NULL COMMENT '上映年份',

`month` int(2) DEFAULT NULL COMMENT '上映月份',

`day` int(2) DEFAULT NULL COMMENT '上映日期',

`categories1`varchar(20) DEFAULT NULL COMMENT '所属类目1',

`categories2`varchar(20) DEFAULT NULL COMMENT '所属类目2',

`time`int(3) DEFAULT NULL COMMENT '时长',PRIMARY KEY(`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8--主演表

CREATE TABLE`t_movie_actors` (

`id`bigint(20) unsigned NOT NULL COMMENT '主键,豆瓣电影id',

`actor1`varchar(50) DEFAULT NULL,

`actor2`varchar(50) DEFAULT NULL,

`actor3`varchar(50) DEFAULT NULL,

`actor4`varchar(50) DEFAULT NULL,

`actor5`varchar(50) DEFAULT NULL,PRIMARY KEY(`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8--评价数据表

CREATE TABLE`t_movie_scores` (

`id`bigint(20) unsigned NOT NULL COMMENT '主键,电影id',

`score`double unsigned DEFAULT '0' COMMENT '评分',

`votes`int(10) unsigned DEFAULT '0' COMMENT '评价人数',

`star1`double unsigned DEFAULT '0' COMMENT '1星比例',

`star2`double unsigned DEFAULT '0' COMMENT '2星比例',

`star3`double unsigned DEFAULT '0' COMMENT '3星比例',

`star4`double unsigned DEFAULT '0' COMMENT '4星比例',

`star5`double unsigned DEFAULT '0' COMMENT '5星比例',PRIMARY KEY(`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

5. 写一个方法把数据插入到数据库里。 也是第一次用python写数据到数据库,折腾了一晚上。 也不知道哪个小菜比写的 %s 不用加引号,搞得我第一次就看到这个,然后出了错一直认为这个是对的,在找别的原因

definset_data(movie):#获取一个数据库连接

conn = pymysql.Connect(host="localhost", port=3306, user="root", password="root", db="douban")#conn.autocommit(True) # 设置自动提交

cursor = conn.cursor() #获取游标

sql_insert_info = ("insert into `t_movie_info`(`id`, `type`, `name`, `director`, `year`, `month`, `day`,"

"`categories1`, `categories2`, `time`) values (%d, %d, '%s', '%s', %d, %d, %d, '%s', '%s', %d)")

categories= movie["categories"]

ca_len=len(categories)

categories1= categories[0] if ca_len > 0 elseNone

categories2= categories[1] if ca_len > 1 elseNone

cursor.execute(sql_insert_info% (movie["id"], movie["type"], movie["name"], movie["directer"], movie["date"].year,

movie["date"].month, movie["date"].day, categories1, categories2, movie["time"]))#写sql 千万记住 %s 要加双引号,不然会报错 Unknown column 'a' in 'field list'

sql_insert_actors = ("insert into `t_movie_actors`(id, actor1, actor2, actor3, actor4, actor5)"

"values(%d, '%s', '%s', '%s', '%s', '%s')")

actors= movie["actors"]

actors_len=len(actors)

actor1= actors[0] if actors_len > 0 elseNone

actor2= actors[1] if actors_len > 1 elseNone

actor3= actors[2] if actors_len > 2 elseNone

actor4= actors[3] if actors_len > 3 elseNone

actor5= actors[4] if actors_len > 4 elseNone

cursor.execute(sql_insert_actors% (movie["id"], actor1, actor2, actor3, actor4, actor5))

sql_insert_scores= ("insert into `t_movie_scores`(id, score, votes, star1, star2, star3, star4, star5)"

"values(%d, %f, %d, %f, %f, %f, %f, %f)")

stars= movie["stars"]

stars_len=len(stars)

star1= stars[0] if stars_len > 0 else 0.0star2= stars[1] if stars_len > 1 else 0.0star3= stars[2] if stars_len > 2 else 0.0star4= stars[3] if stars_len > 3 else 0.0star5= stars[4] if stars_len > 4 else 0.0cursor.execute(sql_insert_scores% (movie["id"], movie["score"], movie["vote"], star1, star2, star3, star4, star5))

conn.commit()

data1= douban_movie("https://movie.douban.com/subject/30236775/?from=showing")

inset_data(data1)

data2= douban_movie("https://movie.douban.com/subject/26842702/?tag=%E7%83%AD%E9%97%A8&from=gaia")

inset_data(data2)

data3= douban_movie("https://movie.douban.com/subject/26973784/?tag=%E6%9C%80%E6%96%B0&from=gaia")

inset_data(data3)

data4= douban_movie("https://movie.douban.com/subject/30249296/?tag=%E7%83%AD%E9%97%A8&from=gaia")

inset_data(data4)

执行完后数据库:

python 存入数据库bigint_【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库...相关推荐

  1. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1) 1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: ...

  2. 爬虫数据存储到数据库/增量爬虫+多级页面获取=====安居客信息爬取

    文章目录 前言 一.增量爬虫是什么? 二.python数据存储到数据库 三.多级页面的跳转获取 四:遇到的问题以及解决 五:代码 总结 前言:这次的爬取内容是安居客网页里面的信息,首先是我爬取的页面是 ...

  3. 将不同数据存储到数据库中_如何将数据存储在兔子洞中

    将不同数据存储到数据库中 Starting with databases and venturing into how the physical components of a computer st ...

  4. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  5. 【Python】从0开始写爬虫——豆瓣电影

    1. 最近略忙..java在搞soap,之前是用工具自动生成代码的.最近可能会写一个soap的java调用 2. 这个豆瓣电影的爬虫.扒信息的部分暂时先做到这了.扒到的信息如下 from scrapy ...

  6. Python爬虫_第二篇 静态网页爬虫(3)_豆瓣数据下载(BeautifulSoupre)

    4.采用正则表达式.BeautifulSoup进行解析提取[豆瓣好.中.差三个短评页面各60条评论数据] 4.1 爬虫的一般思路 分析目标网页,确定爬取的url路径,headers参数[判断是静态网页 ...

  7. python新手教程 从零开始-让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

  8. python读二进制格点雷达基数据_对numpy中二进制格式的数据存储与读取方法详解...

    使用save可以实现对numpy数据的磁盘存储,存储的方式是二进制.查看使用说明,说明专门提到了是未经压缩的二进制形式.存储后的数据可以进行加载或者读取,通过使用load方法. In [81]:np. ...

  9. 租户隔离怎么做MYSQL_基于JPA实现SaaS多租户模式的数据存储——共享数据库,隔离数据架构...

    SaaS是Software-as-a-Service(软件即服务)的简称,这边具体的解释不介绍.多租户的系统可以应用这种模式的思想,将思想融入到系统的设计之中. 现在SaaS Multi-Tenant ...

最新文章

  1. 组合特征(三)tfidf(word+article+length)
  2. python网络爬虫的基本步骤-python爬虫入门需要哪些基础/python 网络爬虫教程
  3. 《CLR via C#》读书笔记 之 类型和成员基础
  4. 使用TimeQuest时序分析器
  5. opengl如何画出一个球_少儿美术绘画教程:毛线球
  6. abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之六(三十二)
  7. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍
  8. 目录 1. Java中使用Ognl表达式引擎 1 1.1.1. 一、Ognl简介 1 1.1.2. 二、Ognl应用场景 1 1.2. 基本介绍 vs 模板语言 2 1.Java中使用Ognl表达
  9. 第2.2节 Python的语句
  10. 网站页面底端“本站已经安全运行XX年XX天XX秒“代码
  11. windows中如何识别RTL8111B/8111C/8111D/8111E/8111F网卡 转自网络
  12. Git官网下载windows版本慢的问题
  13. 火狐浏览器打印网页不全_打印网页显示不全,求助
  14. 4K显示器和防蓝光眼镜膜
  15. 记一次修改开源1078音视频服务器兼容粤标音视频的变更
  16. 微信引流最有效的方法
  17. java轻量级框架_轻量级的Java 开发框架 Spring
  18. Ultraedit 使用技巧
  19. jdbc:mysql:///是什么
  20. android 下拉菜单,Android仿微信实现下拉列表

热门文章

  1. sketch软件_Sketch软件怎么用?怎么提升Sketch软件技巧?
  2. log4日志内容换行_Linux 下 4 种实时监控日志文件的方法,总有一种适合你
  3. 这 6 个 Spring Boot 项目够经典
  4. IDEA万能快捷键,你不知道的17个实用技巧!!!
  5. 高效读取大文件,再也不用担心 OOM 了!
  6. reentrantLock 和 synchronized 哪个性能高?
  7. 并发基础篇(一): Java 并发性和多线程
  8. org.springframework.dao.InvalidDataAccessApiUsageException: Write operations
  9. c语言图形化编程入门_C语言C++新手入门,VS2013编程器安装教程
  10. mybatis学习笔记(2)两种配置实现增删改查