1.保存數(shù)據(jù)為TXT格式
在上一篇文章里面我給大家介紹了如何抓取豆瓣數(shù)據(jù),現(xiàn)在的目的就是抓取下來的數(shù)據(jù)要保存到本地数焊,這樣子方便我們出去查看永淌,可以多種格式:
比如txt,json佩耳,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)單粗暴
安裝成功后是這樣子的
(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ù)給大家看就行
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。
祝大家周末愉快慰照!