Python存儲數(shù)據(jù)

存儲數(shù)據(jù)

如果你需要一個快速簡單的方法收集網(wǎng)上的文檔饱苟,然后存到你的硬盤里孩擂,那么可能需要創(chuàng)建一個文件流( file stream) 來實現(xiàn)。如果還要為偶然事件提個醒兒箱熬,或者每天定時收集當天累計的數(shù)據(jù)类垦,就給自己發(fā)一封郵件吧!


1.媒體文件

存儲媒體文件有兩種主要的方式:只獲取文件URL鏈接城须,或者直接把源文件下載下來蚤认。

urllib.request.urlretrieve 可以根據(jù)文件的 URL 下載文件

http://pythonscraping.com
//這段程序從 http://pythonscraping.com 下載 logo 圖片,然后在程序運行的文件夾里保存為logo.jpg 文件糕伐。
from urllib.request import urlretrieve
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com")
bsObj = BeautifulSoup(html)
imageLocation = bsObj.find("a", {"id": "logo"}).find("img")["src"]
urlretrieve (imageLocation, "logo.jpg")

2.把數(shù)據(jù)存儲到CSV

CSV( Comma-SeparatedValues砰琢,逗號分隔值)是存儲表格數(shù)據(jù)的常用文件格式。 MicrosoftExcel 和很多應(yīng)用都支持 CSV 格式.
eg:

fruit,cost
apple,1.00
banana,0.30
pear,1.25

Python 的 csv 庫可以非常簡單地修改CSV文件良瞧,甚至從零開始創(chuàng)建一個 CSV 文件

import csv
csvFile = open("../files/test.csv", 'w+')
try:
    writer = csv.writer(csvFile)
    writer.writerow(('number', 'number plus 2', 'number times 2'))
    for i in range(10):
        writer.writerow( (i, i+2, i*2))
finally:
    csvFile.close()
運行結(jié)果

網(wǎng)絡(luò)數(shù)據(jù)采集的一個常用功能就是獲取 HTML 表格并寫入 CSV 文件陪汽。

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://en.wikipedia.org/wiki/Comparison_of_text_editors")
bsObj = BeautifulSoup(html)
# 主對比表格是當前頁面上的第一個表格
table = bsObj.findAll("table",{"class":"wikitable"})[0]
rows = table.findAll("tr")
csvFile = open("../files/editors.csv", 'wt', newline=", encoding='utf-8')
writer = csv.writer(csvFile)
try:
    for row in rows:
    csvRow = []
    for cell in row.findAll(['td', 'th']):
        csvRow.append(cell.get_text())
        writer.writerow(csvRow)
finally:
    csvFile.close()

3.MySQL

Python 沒有內(nèi)置的MySQL支持工具。不過褥蚯,有很多開源的庫可以用來與 MySQL 做交互挚冤,Python 2.x和Python 3.x版本都支持。最有名的一個庫就是 PyMySQL(https://github.com/PyMySQL/PyMySQL)赞庶。

4.Email

與網(wǎng)頁通過 HTTP 協(xié)議傳輸一樣训挡,郵件是通過 SMTP( Simple Mail Transfer Protocol,簡單郵件傳輸協(xié)議)傳輸?shù)钠缜俊6依奖。湍阌镁W(wǎng)絡(luò)服務(wù)器的客戶端(瀏覽器)處理那些通過HTTP 協(xié)議傳輸?shù)木W(wǎng)頁一樣, Email 服務(wù)器也有客戶端摊册,像 Sendmail肤京、 Postfix 和 Mailman等,都可以收發(fā)郵件茅特。
下面的代碼運行的前提是你的電腦已經(jīng)可以正常地運行一個 SMTP 客戶端忘分。(如果要調(diào)整代碼用于遠程 SMTP 客戶端,請把 localhost 改成遠程服務(wù)器地址温治。)

import smtplib
from email.mime.text import MIMEText
msg = MIMEText("The body of the email is here")
msg['Subject'] = "An Email Alert"
msg['From'] = "ryan@pythonscraping.com"
msg['To'] = "webmaster@pythonscraping.com"
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

Python 有兩個包可以發(fā)送郵件: smtplib 和 email.

  • email 模塊里包含了許多實用的郵件格式設(shè)置函數(shù)饭庞,可以用來創(chuàng)建郵件“包裹”。下面的示例中使用的 MIMEText 對象熬荆,為底層的 MIME(Multipurpose Internet MailExtensions舟山,多用途互聯(lián)網(wǎng)郵件擴展類型)協(xié)議傳輸創(chuàng)建了一封空郵件, 最后通過高層的SMTP 協(xié)議發(fā)送出去。 MIMEText 對象 msg包括收發(fā)郵箱地址累盗、郵件正文和主題寒矿, Python 通過它就可以創(chuàng)建一封格式正確的郵件。
  • smtplib 模塊用來設(shè)置服務(wù)器連接的相關(guān)信息若债。就像 MySQL 服務(wù)器的連接一樣符相,這個連接必須在用完之后及時關(guān)閉,以避免同時創(chuàng)建太多連接而浪費資源蠢琳。
import smtplib
from email.mime.text import MIMEText
from bs4 import BeautifulSoup
from urllib.request import urlopen
import time
def sendMail(subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = "christmas_alerts@pythonscraping.com"
    msg['To'] = "ryan@pythonscraping.com"
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()

bsObj = BeautifulSoup(urlopen("https://isitchristmas.com/"))
while(bsObj.find("a", {"id":"answer"}).attrs['title'] == "NO"):
    print("It is not Christmas yet.")
    time.sleep(3600)
bsObj = BeautifulSoup(urlopen("https://isitchristmas.com/"))
sendMail("It's Christmas!","According to http://itischristmas.com, it is Christmas!"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啊终,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傲须,更是在濱河造成了極大的恐慌蓝牲,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泰讽,死亡現(xiàn)場離奇詭異例衍,居然都是意外死亡,警方通過查閱死者的電腦和手機已卸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門佛玄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人累澡,你說我怎么就攤上這事梦抢。” “怎么了永乌?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵惑申,是天一觀的道長具伍。 經(jīng)常有香客問我翅雏,道長,這世上最難降的妖魔是什么人芽? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任望几,我火速辦了婚禮,結(jié)果婚禮上萤厅,老公的妹妹穿的比我還像新娘橄抹。我一直安慰自己,他們只是感情好惕味,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布楼誓。 她就那樣靜靜地躺著,像睡著了一般名挥。 火紅的嫁衣襯著肌膚如雪疟羹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音榄融,去河邊找鬼参淫。 笑死,一個胖子當著我的面吹牛愧杯,可吹牛的內(nèi)容都是我干的涎才。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼力九,長吁一口氣:“原來是場噩夢啊……” “哼耍铜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起跌前,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤业扒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舒萎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體程储,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年臂寝,在試婚紗的時候發(fā)現(xiàn)自己被綠了章鲤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡咆贬,死狀恐怖败徊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掏缎,我是刑警寧澤皱蹦,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站眷蜈,受9級特大地震影響沪哺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酌儒,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一辜妓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忌怎,春花似錦籍滴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸥印,卻和暖如春勋功,著一層夾襖步出監(jiān)牢的瞬間样悟,已是汗流浹背夫椭。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唠粥。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓肝断,卻偏偏與公主長得像窜觉,于是被迫代替她去往敵國和親嘉熊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

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

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,452評論 6 428
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富疏咐,涉及面非常廣纤掸。awesome-p...
    若與閱讀 18,629評論 4 418
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡單的交互式python版本管理工具浑塞。pyenv–簡單的Pyth...
    MrHamster閱讀 3,788評論 1 61
  • Python的面向?qū)ο?類 Class 類變量 Class variable 數(shù)據(jù)成員 Data member 函...
    JasonJe閱讀 1,117評論 0 3
  • 什么才算是最具挑戰(zhàn)的事情借跪?不同的人對挑戰(zhàn)的定義不同吧,對我來說酌壕,勇敢嘗試害怕的事情掏愁,就算是一種自我挑戰(zhàn)。永遠去做...
    竹夕顏閱讀 647評論 0 3