python 存入数据库bigint_【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库...
1. 我們扒到了什么?
id, 名稱, 上映年份,上映日期,所屬類目, 導(dǎo)演,主演,片長,評分,星評,評價人數(shù)
2. 把這些數(shù)據(jù)做一個分類。
a..基本信息 :名稱, 導(dǎo)演,上映年份, 所屬類目, 片長
b.評價信息:評分,星評,評價人數(shù)
c.主演表: 主演(我在糾結(jié)要不要單獨列一張表)
3 .表設(shè)計?,F(xiàn)在有點蛋疼的是主鍵。用自增主鍵還是電影id做主鍵。經(jīng)過我的多方面考慮,我慎重(草率)地決定,用電影id(反正都要建唯一索引,為什么不拿來當主鍵呢。。), 所以我剛才又在id那轉(zhuǎn)了一下數(shù)據(jù)
m_id = re.search("[0-9]+", movie_url).group()
movie["id"] = int(m_id)
寫著玩嘛,就是那么隨意,有什么想法就改!!!
4. 建表。。也是蛋疼,我居然糾結(jié)過是用mysql還是mongodb, 馬上就刪自己一個耳光,你會mongodb嘛?感覺要是繼續(xù)又開一個mongodb的坑,我就再也回不來這個爬蟲了。
我也不傻不拉幾地自己寫建表sql了.直接用的SQLyog。稍微糾結(jié)了一下InnoDB和MyISAM。 我開始是想每次把一個電影的信息分別插入三個表,要不要用事務(wù), 又想垃圾數(shù)據(jù)也不會扣我錢,所以用了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 '導(dǎo)演',
`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--評價數(shù)據(jù)表
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 '評價人數(shù)',
`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. 寫一個方法把數(shù)據(jù)插入到數(shù)據(jù)庫里。 也是第一次用python寫數(shù)據(jù)到數(shù)據(jù)庫,折騰了一晚上。 也不知道哪個小菜比寫的 %s 不用加引號,搞得我第一次就看到這個,然后出了錯一直認為這個是對的,在找別的原因
definset_data(movie):#獲取一個數(shù)據(jù)庫連接
conn = pymysql.Connect(host="localhost", port=3306, user="root", password="root", db="douban")#conn.autocommit(True) # 設(shè)置自動提交
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)
執(zhí)行完后數(shù)據(jù)庫:
總結(jié)
以上是生活随笔為你收集整理的python 存入数据库bigint_【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴义智力象机器人_兴义向阳路小学在第十八
- 下一篇: python虚拟环境的安装和配置_基于v