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

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

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

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

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

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

二、 配置Settings

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

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

三、 設(shè)置Piplines

打開job.job/piplines.py。

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


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

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

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

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

五、 查看MongoDB

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

$ mongo
MongoDB shell version: 3.2.4
connecting to: test
> show dbs #查看數(shù)據(jù)庫
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ī)技術(shù)員5000-8000!",
...
}  #可以看到數(shù)據(jù)清楚的出現(xiàn)了

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容