數據存儲
1.存儲至TXT
a+為Python文件的讀寫模式,表示將對文件使用附加讀寫方式打開,如果該文件不存在,就會創建一個新文件。
一般在讀取文件的時候可以使用r方式,如果文件不存在,就會返回錯誤,而且無法向該文件中寫入數據,這樣就保證了讀取文件的可靠性。
綜上所述,地址可以寫成如下3種形式:
(1)with open('C:\\you\desktop\\title.txt',"a+") as f:
(2)with open(r'C:\you\desktop\title.txt',"a+") as f:
(3)with open('C:/you/desktop/title.txt',"a+") as f:
有時候需要把幾個變量寫入TXT文件中,這時分隔符就比較重要了,可以采用Tab進行分隔,因為在字符串中一般不會出現Tab符號。用'\t'.join()將變量鏈接成一個字符串。
output = '\t'.join(['name','title','age','gender'])
with open('./test.txt', "a+") as f:
f.write(output)
f.close()
2.存儲至CSV
CSV文件的每一行都用換行符分隔,列與列之間用逗號分隔。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : Save01.py
@Author: Xinzhe.Pang
@Date : 2019/7/7 0:42
@Desc :
"""
import csv
output_list = ['1', '2', '3', '4']
with open('test2.csv', 'a+', encoding='UTF-8', newline='') as csvfile:
w = csv.writer(csvfile)
w.writerow(output_list)
with open('test2.csv', 'r', encoding='UTF-8') as csvfile:
csv_reader = csv.reader(csvfile)
for row in csv_reader:
print(row)
print(row[0])
3.存儲至MySQL數據庫
首先用pip安裝mysqlclient庫,連接Python和MySQL。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : Save02.py
@Author: Xinzhe.Pang
@Date : 2019/7/7 23:41
@Desc :
"""
import MySQLdb
conn = MySQLdb.connect(host='***.***.***.***', user='*****', passwd='******', db='******', charset='utf8')
cur = conn.cursor()
cur.execute("INSERT INTO urls(url,content) VALUES('www.google.com','Google搜索')")
cur.close()
conn.commit()
conn.close()
其中,conn=MySQLdb.connect()用于創建數據庫的連接,cur=conn.cursor()通過獲取的數據庫連接conn下的cursor()方法來創建游標。之后,通過游標cur操作execute()方法可以寫入純SQL語句。
最后,在完成對MySQL數據庫的操作后,記得關閉游標cur和連接conn。
將爬取的博客標題和URL保存到數據庫中:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : Save03.py
@Author: Xinzhe.Pang
@Date : 2019/7/9 23:21
@Desc :
"""
import requests
from bs4 import BeautifulSoup
import MySQLdb
conn = MySQLdb.connect(host='**.**.**.**', user='****', passwd='***', db='****', charset='utf8')
cur = conn.cursor()
link = "http://www.santostang.com/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
r = requests.get(link, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:
url = eachone.a['href']
title = eachone.a.text.strip()
cur.execute("INSERT INTO urls(url,content) VALUES(%s, %s)", (url, title))
cur.close()
conn.commit()
conn.close()
4.存儲至MongoDB數據庫
MongoDB是一款基于分布式文件存儲的數據庫。在Windows中,data文件夾用來存放MongoDB數據,db文件夾用來存放MongoDB的數據庫,log文件夾用來存放數據庫的操作記錄。
使用MongoDB有兩種啟動方式,一種是以程序的方式打開,另一種是以Windows服務的方式打開。
SQL術語 | MongoDB術語 | 解釋/說明 |
---|---|---|
database | database | 數據庫 |
table | collection | 數據庫表/集合 |
row | document | 數據記錄行/文檔 |
column | field | 數據字段/域 |
index | index | 索引 |
table joins | ? | 表連接,MongoDB不支持 |
primary key | primary key | 主鍵,MongoDB自動將_id字段設置為主鍵 |
?
?
?
?
?
?
?
?
?
MongoDB的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File : Save04.py
@Author: Xinzhe.Pang
@Date : 2019/7/9 23:41
@Desc :
"""
import requests
import datetime
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('****', 27017)
db = client.blog_database
collection = db.blog
link = "http://www.santostang.com/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
r = requests.get(link, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
title_list = soup.find_all("h1", class_="post-title")
for eachone in title_list:
url = eachone.a['href']
title = eachone.a.text.strip()
post = {"url": url,
"title": title,
"date": datetime.datetime.utcnow()}
collection.insert_one(post)
5.使用圖形化管理工具
RoboMongo是MongoDB的圖形化管理工具,只要會使用mongo shell,就可以使用RoboMongo。
參考資料:《Python網絡爬蟲從入門到實踐》
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
