python爬蟲(chóng)入門(mén)2

??有了上次爬蟲(chóng)的基礎(chǔ)歼狼,本次教程主要把爬到的數(shù)據(jù)存入MongoDB數(shù)據(jù)庫(kù)中蔬胯。
??MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品忘衍,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的铺纽。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散柬帕,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型狡门。Mongo最大的特點(diǎn)是他支持的查詢語(yǔ)言非常強(qiáng)大陷寝,其語(yǔ)法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z(yǔ)言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能其馏,而且還支持對(duì)數(shù)據(jù)建立索引凤跑。

1.運(yùn)行環(huán)境與安裝

1.運(yùn)行環(huán)境

??操作系統(tǒng):win7
??數(shù)據(jù)庫(kù):MongoDB
??python庫(kù):BeautifulSoup,requests,pymongo
??IDE:jupyter notebook

2.運(yùn)行環(huán)境安裝

1.MongoDB安裝

以上機(jī)型問(wèn)題搞定后肤寝,下面是所有windows用戶的安裝教程。

  • 下載與你的操作系統(tǒng)對(duì)應(yīng)的安裝包抖僵,打開(kāi)安裝包,按照引導(dǎo)一路下一步進(jìn)行缘揪,默認(rèn)安裝到C盤(pán)耍群。下載地址:https://www.mongodb.com/download-center#community
  • 手動(dòng)設(shè)置MongoDB環(huán)境
    ??我們要設(shè)置一個(gè)目錄來(lái)保存數(shù)據(jù),推薦默認(rèn)路徑C:\data\db找筝。在命令行輸入如下指令:
md C:\data\db

??表示在C盤(pán)創(chuàng)建了一個(gè)目錄data\db蹈垢,存入數(shù)據(jù)庫(kù)中的數(shù)據(jù)都會(huì)保存在這里。

  • 啟動(dòng)MongoDB
    ??在命令行輸入:
C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe

??你的路徑也許和我的不同袖裕,以你自己的為準(zhǔn)曹抬。看到圖1中的紅字表示啟動(dòng)成功急鳄。

圖1
  • 連接MongoDB
    ??不要關(guān)閉剛才的命令行窗口谤民,打開(kāi)一個(gè)新命令行窗口堰酿,輸入如下指令:
“C:\Program Files\MongoDB\Server\3.4\bin\mongo.exe”

??因?yàn)槟夸浿邪崭瘢孕枰由想p引號(hào)张足〈ゴ矗看到圖2左下角的“>”,表示連接成功(雖然有警告为牍,但是不影響正常使用)哼绑。

圖2
  • MongoDB基本操作
    ??現(xiàn)在已經(jīng)成功連接MongoDB,我們可以創(chuàng)建并查看里面的數(shù)據(jù)庫(kù)碉咆。輸入如下指令創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):
use test

??表示創(chuàng)建并使用了一個(gè)名為test的數(shù)據(jù)庫(kù)抖韩,用下面的指令向test數(shù)據(jù)庫(kù)中添加一個(gè)集合:

db.createCollection("mCollection")

??創(chuàng)建了一個(gè)名為mCollection的集合∫咄可用下面指令來(lái)查看MongoDB中的數(shù)據(jù)庫(kù):

show dbs

??顯示如圖3茂浮,其中test就是剛才我們創(chuàng)建的數(shù)據(jù)庫(kù),其他的都是我之前創(chuàng)建的块攒。

圖3

??用下面的指令來(lái)查看test數(shù)據(jù)庫(kù)中的集合:

use test
show collections

??圖4顯示了我們剛才創(chuàng)建的mCollection集合励稳。

圖4

??更多關(guān)于MongoDB的基本操作,請(qǐng)移步http://www.yiibai.com/mongodb/mongodb_quick_guide.html

  • 為windows系統(tǒng)配置MongoDB囱井,讓其隨windows一起啟動(dòng)(可選)
    ??如果不做這一步驹尼,每次啟動(dòng)windows時(shí),像上面那樣手動(dòng)啟動(dòng)MongoDB即可庞呕。
    ??剛才打開(kāi)了兩個(gè)命令行窗口新翎,現(xiàn)在都可以關(guān)閉了。打開(kāi)一個(gè)新命令行窗口住练,輸入:
mkdir C:\data\log

??關(guān)閉這個(gè)命令行地啰,然后在硬盤(pán)的某個(gè)地方創(chuàng)建一個(gè)名為mongod.cfg的文件,在其中輸入:

systemLog:
4個(gè)空格destination:1個(gè)空格file
4個(gè)空格path:1個(gè)空格c:\data\log\mongod.log
storage:
4個(gè)空格dbPath:1個(gè)空格c:\data\db

??即

systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db

??以管理員的權(quán)限重新打開(kāi)一個(gè)命令行讲逛,輸入如下命令:

"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --config "C:\mongodb\mongod.cfg" --install

??等待結(jié)束亏吝;如果一直卡著不動(dòng),過(guò)一會(huì)兒關(guān)閉就是(路徑以你自己的為準(zhǔn))盏混。命令行中輸入如下命令蔚鸥,啟動(dòng)MongoDB服務(wù):

net start MongoDB

2.pymongo安裝

pymongo是一個(gè)python庫(kù),用于操作MongoDB中的數(shù)據(jù)庫(kù)许赃。
打開(kāi)一個(gè)命令行止喷,輸入如下命令:

D:\Anaconda3\Scripts\pip install pymongo
圖5

??如圖5所示,表示用Anaconda3自帶的pip工具安裝pymongo庫(kù)混聊。若顯示如圖6弹谁,說(shuō)明安裝成功。

圖6

2.把商品數(shù)據(jù)存入數(shù)據(jù)庫(kù)

1.連接MongoDB

開(kāi)始編程:

from bs4 import BeautifulSoup
import requests
import pymongo  #引入pymongo庫(kù)

#連接MongoDB
client = pymongo.MongoClient('localhost',27017)
#創(chuàng)建一個(gè)名為ganJi的數(shù)據(jù)庫(kù)
ganJi = client['ganJi']
#在ganJi數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為item_info的集合
item_info = ganJi ['item_info']

??在上面的代碼中,client['ganJi']中的ganJi是MongoDB中數(shù)據(jù)庫(kù)的名字预愤,ganJi = client['ganJi']中賦值號(hào)左邊的ganJi是本python代碼中要操作ganJi數(shù)據(jù)庫(kù)的對(duì)象名字沟于。盡量使賦值號(hào)左右兩邊取相同的名字,避免出錯(cuò)鳖粟。

2.爬取商品信息并存入數(shù)據(jù)庫(kù)

for each_link in link_list:
    wb_data = requests.get(each_link)
    soup = BeautifulSoup(wb_data.text,'lxml')
    title = soup.select('h1.title-name')[0].get_text()
    price = soup.select('i.f22.fc-orange.f-type')[0].get_text()
    date = soup.select('i.pr-5')[0].get_text()
    areas = soup.select('ul.det-infor > li > a')
    area = ''
    for i in areas:
        area += i.get_text()+'-'
    area = area[:-1]
    data = {
        '標(biāo)題':title,
        '日期':date.strip().split('\xa0')[0],
        '價(jià)格':price,
        '地點(diǎn)':area
    }
    print (data)
    item_info.insert_one(data)  #把一條data字典存入數(shù)據(jù)庫(kù)

??在上面的代碼中社裆,用到了上次教程中的link_list。對(duì)于每個(gè)鏈接對(duì)應(yīng)的商品向图,爬取其信息泳秀,并通過(guò)insert_one方法存入ganJi數(shù)據(jù)庫(kù)中的item_info集合中。

3.查看數(shù)據(jù)庫(kù)中的數(shù)據(jù)

可通過(guò)find方法來(lái)查看item_info集合中的商品數(shù)據(jù):

for i in item_info.find():
    print(i)

結(jié)果顯示為:

{'_id': ObjectId('5904b9e28e7b770dc44c2a0e'), '標(biāo)題': '北京移動(dòng)的卡,05年15元包月流量隨便用,全國(guó)的,永久有效, - 2800元', '日期': '04-29 13:51', '價(jià)格': '2800', '地點(diǎn)': '近期價(jià)格走勢(shì)- 北京-通州'}
{'_id': ObjectId('5904b9e28e7b770dc44c2a0f'), '標(biāo)題': '官網(wǎng)搶購(gòu)小米6忍痛轉(zhuǎn)讓 - 2799元', '日期': '04-29 14:19', '價(jià)格': '2799', '地點(diǎn)': ' 北京-海淀-中關(guān)村'}
{'_id': ObjectId('5904b9e38e7b770dc44c2a10'), '標(biāo)題': '歐沃4s手機(jī) - 400元', '日期': '04-29 12:46', '價(jià)格': '400', '地點(diǎn)': ' 北京-北京周邊'}
{'_id': ObjectId('5904b9e38e7b770dc44c2a11'), '標(biāo)題': '全新未拆封小米6 亮黑色 - 2999元', '日期': '04-28 22:49', '價(jià)格': '2999', '地點(diǎn)': ' 北京-豐臺(tái)'}
{'_id': ObjectId('5904b9e38e7b770dc44c2a12'), '標(biāo)題': 'iphone4s轉(zhuǎn)讓,非華為小米酷派天語(yǔ)中興 - 240元', '日期': '04-27 17:44', '價(jià)格': '240', '地點(diǎn)': '近期價(jià)格走勢(shì)- 北京-海淀-北太平莊'}
{'_id': ObjectId('5904b9e48e7b770dc44c2a13'), '標(biāo)題': '電信無(wú)線座機(jī) 電信無(wú)線座機(jī)電話 - 350元', '日期': '04-27 17:03', '價(jià)格': '350', '地點(diǎn)': '近期價(jià)格走勢(shì)- 北京-豐臺(tái)-麗澤橋'}

??注意到榄攀,除了我們想要的信息外嗜傅,每條數(shù)據(jù)自動(dòng)增加了一個(gè)叫做“_id”的字段,它用來(lái)編號(hào)集合中的數(shù)據(jù)檩赢,每條數(shù)據(jù)都有一個(gè)唯一的ID吕嘀。

4.從數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)

??現(xiàn)在MongoDB中已經(jīng)存儲(chǔ)了爬取的商品信息,現(xiàn)在我們要把這些信息導(dǎo)出為csv文件和json文件贞瞒。導(dǎo)出文件的一般格式為:

mongoexport -h 127.0.0.1 -d dataBaseName -c collectionName -o yourPath
  • 若要導(dǎo)出為csv文件偶房,在命令行中輸入下面的指令:
mongoexport -h 127.0.0.1 -d ganJi -c item_info -o E:\testCsv.csv
  • 若要導(dǎo)出為json文件,在命令行中輸入下面的指令:
mongoexport -h 127.0.0.1 -d ganJi -c item_info -o E:\testJson.json

若顯示圖7所示內(nèi)容军浆,表示導(dǎo)出成功棕洋。

圖7

這樣,csv文件就可用excel查看了乒融,json文件就可用Notepad++查看了掰盘。

5.把數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)

??我們就把剛才導(dǎo)出的兩個(gè)文件testCsv.csv和testJson.json再導(dǎo)入到數(shù)據(jù)庫(kù)。導(dǎo)入文件的一般格式為:

mongoimport -h 127.0.0.1 -d database_name -c collection_name yourPath
  • 若要導(dǎo)入csv文件赞季,在命令行中輸入下面的指令:
mongoimport -h 127.0.0.1 -d new_db -c testCsv E:\testCsv.csv
  • 若要導(dǎo)入json文件愧捕,在命令行中輸入下面的指令:
mongoimport -h 127.0.0.1 -d new_db -c testJson E:\testJson.json

若顯示圖8所示內(nèi)容,表示導(dǎo)入成功申钩。

圖8
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氓奈,一起剝皮案震驚了整個(gè)濱河市遇汞,隨后出現(xiàn)的幾起案子元媚,更是在濱河造成了極大的恐慌疼蛾,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉舔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伙菜,警方通過(guò)查閱死者的電腦和手機(jī)轩缤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人火的,你說(shuō)我怎么就攤上這事壶愤。” “怎么了馏鹤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵征椒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我湃累,道長(zhǎng)勃救,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任治力,我火速辦了婚禮蒙秒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵统。我一直安慰自己晕讲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布马澈。 她就那樣靜靜地躺著瓢省,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痊班。 梳的紋絲不亂的頭發(fā)上勤婚,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音辩块,去河邊找鬼蛔六。 笑死,一個(gè)胖子當(dāng)著我的面吹牛废亭,可吹牛的內(nèi)容都是我干的国章。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豆村,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼液兽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掌动,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤四啰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后粗恢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柑晒,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年眷射,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匙赞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佛掖。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涌庭,靈堂內(nèi)的尸體忽然破棺而出芥被,到底是詐尸還是另有隱情,我是刑警寧澤坐榆,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布拴魄,位于F島的核電站,受9級(jí)特大地震影響席镀,放射性物質(zhì)發(fā)生泄漏匹中。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一愉昆、第九天 我趴在偏房一處隱蔽的房頂上張望职员。 院中可真熱鬧,春花似錦跛溉、人聲如沸焊切。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)专肪。三九已至,卻和暖如春堪侯,著一層夾襖步出監(jiān)牢的瞬間嚎尤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工伍宦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芽死,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓次洼,卻偏偏與公主長(zhǎng)得像关贵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卖毁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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