python 存入数据库bigint_【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库...
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开始写爬虫——把扒到的豆瓣数据存储到数据库...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴义智力象机器人_兴义向阳路小学在第十八
- 下一篇: 平行相似定理_初中数学知识点----相似