写的内容越来越多,因此做成一个系列,希望系列的最终,我能够找到一个中意的工作,谢谢大家。我将定期更新相关内容:
Scrapy 抓取本地论坛招聘内容 (一)
Scrapy 抓取本地论坛招聘内容 (二)
在上一篇里,我们已经能成功的把我们想要的数据用scrapy抓取下来了,可是我们是存储为json格式的,但是我们如果想要存到数据库要怎么办呢?
关于怎么抓取本地论坛招聘数据请看第一篇 Scrapy 抓取本地论坛招聘内容 (一) 。
0x00 安装数据库
对于网络爬虫最方便的数据库莫过于MongoDB了,因此我这里也选择了MongoDB,不知道怎么安装的了可以看我另外的文章 Ubuntu 16.04 安装 Mongodb 。
0x01 配置Settings
进入之前的项目,打开job/job/settings.py。添加以下内容:
MONGODB_SERVER = "localhost"; #数据库host,也可以写成127.0.0.1
MONGODB_PORT = 27017 #数据库Port
MONGODB_DB = "job"; #数据库名
MONGODB_COLLECTION = "cnnb"; #数据库表名
ITEM_PIPELINES = {
'job.pipelines.JobPipeline': 300,
} # 这个配置才能使设置的piplines生效,可以在piplines设置好后再配置
0x02 设置Piplines
打开job.job/piplines.py。
# 引入pymongo库,可用操作mongodb
import pymongo
# 引入settings, 可以使用settings里的变量
from scrapy.conf import settings
class JobPipeline(object):
def __init__(self):
# 引用settings里的数据连接数据库使用
host = settings["MONGODB_HOST"]
port = settings["MONGODB_PORT"]
dbname = settings["MONGODB_DB"]
collection = settings["MONGODB_COLLECTION"]
# 创建MONGODB数据库链接
client = pymongo.MongoClient(host=host, port=port)
# 指定数据库
mydb = client[dbname]
# 存放数据的数据库表名
self.post = mydb[collection]
def process_item(self, item, spider):
valid = True
for data in item:
# 如果item里没有返回数据
if not data:
valid = False
raise DropItem("Missing {0}!".format(data))
# 如果有正常数据返回,插入数据库
if valid:
self.post.insert(dict(item))
log.msg("Data added to MongoDB database!",
level=log.DEBUG, spider=spider)
return item
0x03 运行数据库
scrapy crawl cnnb # 这里可以和上次不一样了, 不用再使用-o cnnb.json导出json格式了
0x04 查看MongoDB
程序到底有没有成功,数据有没有像我们希望的那样存储到了MongoDB里面呢,我们打开终端验证一下:
$ mongo
MongoDB shell version: 3.2.4
connecting to: test
> show dbs #查看数据库
job 0.001GB #可以看到 job已经存在了
local 0.000GB
> use job #进入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" : "急!急招[君通]聘智能化设计及计算机技术员5000-8000!",
...
} #可以看到数据清楚的出现了
至此,我们已经成功的把数据存储到了MongoDB. 实现了我们的目的。欢迎大家指正批评,谢谢。下次我们将用抓取的数据做些有意思的分析(嗯,难道我不是为了找工作才抓的数据吗?)
网友评论