爬取豆瓣数据保存为TXT或者json和MySQL中去


1.保存数据为TXT格式
在上一篇文章里面我给大家介绍了如何抓取豆瓣数据,现在的目的就是抓取下来的数据要保存到本地,这样子方便我们出去查看,可以多种格式:
比如txtjsonxml,或者MySQL和MongoDB都行,看你喜欢喽
下面我就先以第一种方式给大家演示一下第一种:


class DoubanPipeline(object):
    def process_item(self, item, spider):
        #获取当前工作目录
        base_dir=os.getcwd()
        filename=base_dir+"/douban.txt"
        #爬取的内容写入文件以追加的方式
        with open(filename,'a',encoding='utf-8') as f:
            f.write("".join(item["numbers"])+"\n")#写入序号换行
            f.write("".join(item["link"])+"\n") #写入链接换行
            f.write("".join(item["movie_name"])+"\n")#写入电影名字换行
            f.write("".join(item["director"])+"\n")#写入导演还有电影的类型
            f.write("".join(item["rating_num"])+"\n")#星级
            f.write("".join(item["evaluate"]) +"\n")#评价的人数
            f.write("".join(item["desc"])+"\n")#描述
            #关闭文件操作
            f.close()
        return item

(1).需要注意的问题是如果你是运行在Python2.7的环境下的话就不用加encoding='utf-8',Python3的话就需要指定编码否则会乱码
(2).写完之后在settings.py里面开启
代码:


ITEM_PIPELINES = {
   'douban.pipelines.DoubanPipeline': 300,
   'douban.pipelines.JsonPipeline': 200,
   'douban.pipelines.MysqlPipeline': 100
}

2.保存为json数据
(1).什么是JSON?
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON轻量级的文本数据交换格式
JSON文件
JSON 文件的文件类型是 ".json"
JSON 文本的 MIME 类型是 "application/json"
(2).代码如下:


#保存为json数据
class JsonPipeline(object):
    def __init__(self):
        self.file=open("./douban.json","wb")

    def process_item(self, item, spider):
        line=json.dumps(dict(item),ensure_ascii=False)+"\n"
        self.file.write(line.encode('utf-8'))
        return item

    def spider_closed(self):
        self.file.close()
  • __init__函数首先初始化这个函数,以写入流的方式读写这个文本
  • json.dumps
  • json.dumps 用于将 Python 对象编码成 JSON 字符串
  • 语法
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        default=None, sort_keys=False, **kw):

案例:

import json
data=[{"name":"苍井空","age":35,"name1":"波多野结衣","age1":30}]
json=json.dumps(data,ensure_ascii=False)
print(json)

以上代码的执行结果为
[{"name": "苍井空", "age": 35, "age1": 30, "name1": "波多野结衣"}]


3.最后一种保存到MySQL中去
(1).首先要安装pymysql
直接pip install pymysql简单粗暴
安装成功后是这样子的


捕获.JPG

(2).使用之前自己先创建好数据库和数据表

  • 创建数据库douban
    CREATE DATABASE IF NOT EXISTS douban;
  • 创建数据表doubanmovie
DROP TABLE IF EXISTS `doubanmovie`;
CREATE TABLE  `doubanmovie` (
  `numbers` varchar(100) NOT NULL,
  `movie_name` varchar(100) DEFAULT NULL,
  `rating_num` varchar(100) DEFAULT NULL,
  `director` varchar(100) DEFAULT NULL,
  `link` varchar(100) DEFAULT NULL,
  `desc` varchar(100) DEFAULT NULL,
  `evaluate` varchar(100) DEFAULT NULL
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 保存到MySQL中
#爬取到的数据保存到MySQL数据库里面去
class MysqlPipeline(object):
    def __init__(self):
        #数据库的连接
        self.conn=pymysql.connect(
            host="127.0.0.1", #主机名地址
            port=3306, #端口号
            user="root", #用户的密码
            passwd="root", #你自己的密码
            db="douban", #数据库法人名字
            charset="utf8" #设置编码是为了防止乱码
        )
        #通过cursor()方法创建自己的游标对象
        self.cursor=self.conn.cursor()
        self.cursor.execute('truncate table doubanmovie')
        self.conn.commit()


    def process_item(self,item,spider):
        try:
            #插入你的SQL语句
            self.cursor.execute('''insert into doubanmovie (`numbers`,`movie_name`,`rating_num`,`director`,`link`,`desc`,`evaluate`)
            VALUES (%s,%s,%s,%s,%s,%s,%s)
            ''',(item["numbers"],item["movie_name"],item["rating_num"],item["director"],item["link"],item["desc"],item["evaluate"]))
            #提交数据库事务
            self.conn.commit()

        except:
            #如果发生错误就会回滚
            self.conn.rollback()
        return item
里面的注释有说明我就不多说了

(3). 下面可以在数据库里面查询表数据

  • 可以使用外部工具Navicat for MySQL
  • 我就截取一部分数据给大家看就行

data.PNG

mysql> select * from doubanmovie
 where numbers=1;
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
| numbers | movie_name   | rating_num | director           | link                                      | desc           | evaluate      |
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
| 1       | 肖申克的救赎 | 9.6        | 1994/美国/犯罪剧情 | https://movie.douban.com/subject/1292052/ | 希望让人自由。 | 1164078人评价 |
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
1 row in set
  • 肖申克的救赎在豆瓣top250里面排名第一,评分9.6,属于犯罪剧情片,可谓是一部不错的影片
mysql> select * from doubanmovie
 where numbers=250
;
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
| numbers | movie_name | rating_num | director                   | link                                      | desc              | evaluate     |
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
| 250     | 蓝色大门   | 8.3        | 2002/台湾法国/剧情爱情同性 | https://movie.douban.com/subject/1308575/ | 青春的窃窃私语。  | 292193人评价 |
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
1 row in set
  • 排名最后的是蓝色大门,这一部台湾爱情片居然拍最后,看关键字眼同性啊各位兄弟
  • 结束语

欢迎各种像我一样的Python菜鸟,Python大神加入,一起愉快地交流学♂习,van♂转py。


van.gif
1.gif
image.png
image.png

祝大家周末愉快!


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,930评论 2 89
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,218评论 4 16
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,980评论 3 119
  • 喜欢付出,暂时不会看到回报时请不要灰心,因为不是所有的付出都能马上的到回报,但是请相信付出了就一定会有回报,你付出...
    口述笔录阅读 287评论 0 1
  • 说话是每个人都有的权利,但是如果自己口吃了,肯定会遭到别人的笑话。这部影片中讲述了一个国王没有办法进行演讲,因为他...
    瑾单一点阅读 422评论 0 0