Scrapy實(shí)戰(zhàn):抓取本地論壇招聘內(nèi)容 (二)

寫(xiě)的內(nèi)容越來(lái)越多,因此做成一個(gè)系列,謝謝大家。我將定期更新相關(guān)內(nèi)容:
Scrapy實(shí)戰(zhàn):抓取本地論壇招聘內(nèi)容 (一)
Scrapy實(shí)戰(zhàn):抓取本地論壇招聘內(nèi)容 (二)

在上一篇里,我們已經(jīng)能成功的把我們想要的數(shù)據(jù)用scrapy抓取下來(lái)了,可是我們是存儲(chǔ)為json格式的,但是我們?nèi)绻胍娴綌?shù)據(jù)庫(kù)要怎么辦呢?

關(guān)于怎么抓取本地論壇招聘數(shù)據(jù)請(qǐng)看第一篇 Scrapy 抓取本地論壇招聘內(nèi)容 (一)

一、 安裝數(shù)據(jù)庫(kù)

對(duì)于網(wǎng)絡(luò)爬蟲(chóng)最方便的數(shù)據(jù)庫(kù)莫過(guò)于MongoDB了,因此我這里也選擇了MongoDB,不知道怎么安裝的了可以看我另外的文章 Ubuntu 16.04 安裝 Mongodb

二、 配置Settings

進(jìn)入之前的項(xiàng)目,打開(kāi)job/job/settings.py。添加以下內(nèi)容:

MONGODB_SERVER = "localhost"; #數(shù)據(jù)庫(kù)host,也可以寫(xiě)成127.0.0.1
MONGODB_PORT = 27017 #數(shù)據(jù)庫(kù)Port
MONGODB_DB = "job"; #數(shù)據(jù)庫(kù)名
MONGODB_COLLECTION = "cnnb"; #數(shù)據(jù)庫(kù)表名
ITEM_PIPELINES = {
   'job.pipelines.JobPipeline': 300,
} # 這個(gè)配置才能使設(shè)置的piplines生效,可以在piplines設(shè)置好后再配置

三、 設(shè)置Piplines

打開(kāi)job.job/piplines.py。

# 引入pymongo庫(kù),可用操作mongodb
import pymongo
# 引入settings, 可以使用settings里的變量
from scrapy.conf import settings


class JobPipeline(object):
    def __init__(self):
        # 引用settings里的數(shù)據(jù)連接數(shù)據(jù)庫(kù)使用
        host = settings["MONGODB_HOST"]
        port = settings["MONGODB_PORT"]
        dbname = settings["MONGODB_DB"]
        collection = settings["MONGODB_COLLECTION"]
        # 創(chuàng)建MONGODB數(shù)據(jù)庫(kù)鏈接
        client = pymongo.MongoClient(host=host, port=port)
        # 指定數(shù)據(jù)庫(kù)
        mydb = client[dbname]
        # 存放數(shù)據(jù)的數(shù)據(jù)庫(kù)表名
        self.post = mydb[collection]

    def process_item(self, item, spider):
        valid = True
        for data in item:
            # 如果item里沒(méi)有返回?cái)?shù)據(jù)
            if not data:
                valid = False
                raise DropItem("Missing {0}!".format(data))
        # 如果有正常數(shù)據(jù)返回,插入數(shù)據(jù)庫(kù)
        if valid:
            self.post.insert(dict(item))
            log.msg("Data added to MongoDB database!",
                    level=log.DEBUG, spider=spider)
        return item

四、 運(yùn)行數(shù)據(jù)庫(kù)

scrapy crawl cnnb # 這里可以和上次不一樣了, 不用再使用-o cnnb.json導(dǎo)出json格式了

五、 查看MongoDB

程序到底有沒(méi)有成功,數(shù)據(jù)有沒(méi)有像我們希望的那樣存儲(chǔ)到了MongoDB里面呢,我們打開(kāi)終端驗(yàn)證一下:

$ mongo
MongoDB shell version: 3.2.4
connecting to: test
> show dbs #查看數(shù)據(jù)庫(kù)
job        0.001GB #可以看到 job已經(jīng)存在了
local      0.000GB
> use job #進(jìn)入job
switched to db job
> show tables #查看表
cnnb #cnnb也存在
> db.cnnb.find().pretty()
{
        "_id" : ObjectId("5b129db7ce28262cd0d69785"),
        "link" : "http://bbs.cnnb.com/forum.php?mod=viewthread&tid=7165496&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26typeid%3D103",
        "title" : "急!急招[君通]聘智能化設(shè)計(jì)及計(jì)算機(jī)技術(shù)員5000-8000!",
...
}  #可以看到數(shù)據(jù)清楚的出現(xiàn)了

至此,我們已經(jīng)成功的把數(shù)據(jù)存儲(chǔ)到了MongoDB. 實(shí)現(xiàn)了我們的目的。歡迎大家指正批評(píng),謝謝。下次我們將用抓取的數(shù)據(jù)做些有意思的分析!

代碼 https://github.com/nenyah/job

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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