爬取豆瓣數(shù)據(jù)保存為TXT或者json和MySQL中去


1.保存數(shù)據(jù)為TXT格式
在上一篇文章里面我給大家介紹了如何抓取豆瓣數(shù)據(jù),現(xiàn)在的目的就是抓取下來的數(shù)據(jù)要保存到本地数焊,這樣子方便我們出去查看永淌,可以多種格式:
比如txtjson佩耳,xml遂蛀,或者M(jìn)ySQL和MongoDB都行,看你喜歡嘍
下面我就先以第一種方式給大家演示一下第一種:


class DoubanPipeline(object):
    def process_item(self, item, spider):
        #獲取當(dāng)前工作目錄
        base_dir=os.getcwd()
        filename=base_dir+"/douban.txt"
        #爬取的內(nèi)容寫入文件以追加的方式
        with open(filename,'a',encoding='utf-8') as f:
            f.write("".join(item["numbers"])+"\n")#寫入序號(hào)換行
            f.write("".join(item["link"])+"\n") #寫入鏈接換行
            f.write("".join(item["movie_name"])+"\n")#寫入電影名字換行
            f.write("".join(item["director"])+"\n")#寫入導(dǎo)演還有電影的類型
            f.write("".join(item["rating_num"])+"\n")#星級(jí)
            f.write("".join(item["evaluate"]) +"\n")#評(píng)價(jià)的人數(shù)
            f.write("".join(item["desc"])+"\n")#描述
            #關(guān)閉文件操作
            f.close()
        return item

(1).需要注意的問題是如果你是運(yùn)行在Python2.7的環(huán)境下的話就不用加encoding='utf-8'干厚,Python3的話就需要指定編碼否則會(huì)亂碼
(2).寫完之后在settings.py里面開啟
代碼:


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

2.保存為json數(shù)據(jù)
(1).什么是JSON?
JSON:JavaScript 對(duì)象表示法(JavaScript Object Notation)答恶。
JSON 是存儲(chǔ)和交換文本信息的語法。類似 XML萍诱。
JSON 比 XML 更小悬嗓、更快,更易解析裕坊。
JSON輕量級(jí)的文本數(shù)據(jù)交換格式
JSON文件
JSON 文件的文件類型是 ".json"
JSON 文本的 MIME 類型是 "application/json"
(2).代碼如下:


#保存為json數(shù)據(jù)
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__函數(shù)首先初始化這個(gè)函數(shù)包竹,以寫入流的方式讀寫這個(gè)文本
  • json.dumps
  • json.dumps 用于將 Python 對(duì)象編碼成 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":"波多野結(jié)衣","age1":30}]
json=json.dumps(data,ensure_ascii=False)
print(json)

以上代碼的執(zhí)行結(jié)果為
[{"name": "蒼井空", "age": 35, "age1": 30, "name1": "波多野結(jié)衣"}]


3.最后一種保存到MySQL中去
(1).首先要安裝pymysql
直接pip install pymysql簡(jiǎn)單粗暴
安裝成功后是這樣子的


捕獲.JPG

(2).使用之前自己先創(chuàng)建好數(shù)據(jù)庫和數(shù)據(jù)表

  • 創(chuàng)建數(shù)據(jù)庫douban
    CREATE DATABASE IF NOT EXISTS douban;
  • 創(chuàng)建數(shù)據(jù)表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中
#爬取到的數(shù)據(jù)保存到MySQL數(shù)據(jù)庫里面去
class MysqlPipeline(object):
    def __init__(self):
        #數(shù)據(jù)庫的連接
        self.conn=pymysql.connect(
            host="127.0.0.1", #主機(jī)名地址
            port=3306, #端口號(hào)
            user="root", #用戶的密碼
            passwd="root", #你自己的密碼
            db="douban", #數(shù)據(jù)庫法人名字
            charset="utf8" #設(shè)置編碼是為了防止亂碼
        )
        #通過cursor()方法創(chuàng)建自己的游標(biāo)對(duì)象
        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"]))
            #提交數(shù)據(jù)庫事務(wù)
            self.conn.commit()

        except:
            #如果發(fā)生錯(cuò)誤就會(huì)回滾
            self.conn.rollback()
        return item
里面的注釋有說明我就不多說了

(3). 下面可以在數(shù)據(jù)庫里面查詢表數(shù)據(jù)

  • 可以使用外部工具Navicat for MySQL
  • 我就截取一部分?jǐn)?shù)據(jù)給大家看就行

data.PNG

mysql> select * from doubanmovie
 where numbers=1;
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
| numbers | movie_name   | rating_num | director           | link                                      | desc           | evaluate      |
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
| 1       | 肖申克的救贖 | 9.6        | 1994/美國(guó)/犯罪劇情 | https://movie.douban.com/subject/1292052/ | 希望讓人自由。 | 1164078人評(píng)價(jià) |
+---------+--------------+------------+--------------------+-------------------------------------------+----------------+---------------+
1 row in set
  • 肖申克的救贖在豆瓣top250里面排名第一籍凝,評(píng)分9.6周瞎,屬于犯罪劇情片,可謂是一部不錯(cuò)的影片
mysql> select * from doubanmovie
 where numbers=250
;
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
| numbers | movie_name | rating_num | director                   | link                                      | desc              | evaluate     |
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
| 250     | 藍(lán)色大門   | 8.3        | 2002/臺(tái)灣法國(guó)/劇情愛情同性 | https://movie.douban.com/subject/1308575/ | 青春的竊竊私語饵蒂。  | 292193人評(píng)價(jià) |
+---------+------------+------------+----------------------------+-------------------------------------------+-------------------+--------------+
1 row in set
  • 排名最后的是藍(lán)色大門声诸,這一部臺(tái)灣愛情片居然拍最后,看關(guān)鍵字眼同性啊各位兄弟
  • 結(jié)束語

歡迎各種像我一樣的Python菜鳥退盯,Python大神加入彼乌,一起愉快地交流學(xué)♂習(xí)泻肯,van♂轉(zhuǎn)py。


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

祝大家周末愉快慰照!


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灶挟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子毒租,更是在濱河造成了極大的恐慌稚铣,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墅垮,死亡現(xiàn)場(chǎng)離奇詭異惕医,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)算色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門曹锨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剃允,你說我怎么就攤上這事沛简。” “怎么了斥废?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵椒楣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我牡肉,道長(zhǎng)捧灰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任统锤,我火速辦了婚禮毛俏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饲窿。我一直安慰自己煌寇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布逾雄。 她就那樣靜靜地躺著阀溶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸦泳。 梳的紋絲不亂的頭發(fā)上银锻,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音做鹰,去河邊找鬼击纬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钾麸,可吹牛的內(nèi)容都是我干的更振。 我是一名探鬼主播炕桨,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼殃饿!你這毒婦竟也來了谋作?” 一聲冷哼從身側(cè)響起芋肠,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤乎芳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后帖池,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈惑,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年睡汹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肴甸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡囚巴,死狀恐怖原在,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彤叉,我是刑警寧澤庶柿,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站秽浇,受9級(jí)特大地震影響浮庐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柬焕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一审残、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斑举,春花似錦搅轿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凌彬,卻和暖如春沸柔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铲敛。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工褐澎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伐蒋。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓工三,卻偏偏與公主長(zhǎng)得像迁酸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俭正,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容