最近使用scrapy作数据挖掘,使用scrapy定时抓取数据并存入MongoDB,本文记录环境搭建过程以做备忘css
OS:ubuntu 14.04 python:2.7.6 scrapy:1.0.5 DB:MongoDB 3html
ubuntu14.04内置python2.7,所以python及pip安装再也不赘述。python
一.安装scrapylinux
pip install Scrapy 因为scrapy相关依赖较多,所以在安装过程当中可能遇到以下问题:mongodb
1.ImportError: No module named w3lib.httpshell
解决:pip install w3lib数据库
2.ImportError: No module named twistedubuntu
解决:pip install twisted
3.ImportError: No module named lxml.html
解决:pip install lxml
4.error: libxml/xmlversion.h: No such file or directory
解决:apt-get install libxml2-dev libxslt-dev
apt-get install python-lxml
5.ImportError: No module named cssselect
解决:pip install cssselect
6.ImportError: No module named OpenSSL
解决:pip install pyOpenSSL
以上基本涵盖安装过程当中可能出现的依赖问题,若有遗漏待发现后补充
使用scrapy --version 如显示出版本信息则安装成功
浏览器
二:MongoDB安装及权限设置python2.7
要将爬虫爬取的对象存入MongoDB首先安装MongoDB,,能够直接使用apt-get安装,详情见http://docs.mongoing.com/manual-zh/tutorial/install-mongodb-on-ubuntu.html,也能够从MongoDB官网下载安装包。我使用的方式是从官网直接下载最新安装包。
下载完后解压,是一个.gz文件,直接用tar命令解压便可,注意不要使用gunzip命令。接着将解压以后的包移到制定目录下(例如放到/usr/local/mongodb文件夹下),配置环境变量export PATH=<mongodb-install-directory>/bin:$PATH
注意:MongoDB的数据存储在/data/db目录下,这个目录须要手动建立(EX. /usr/local/mongodb/data/db)
接着进入bin目录下执行./mongod,便可启动MongoDB了,在浏览器中输入localhost:27017或localhost:28017,若是有内容则说明启动成功。接着执行./mongo命令,就进入了mongo shell控制台,而后就能够操做mongo了。
mongo默认没有设置权限,因此只要能够接入的用户均可以访问而且执行任何操做,所以要设置权限。一个须要注意的地方是mongo3和mongo2的权限设置很有不一样,相互之间不能照搬。这里仅说明mongo3的设置方法。
1)首先使用不验证方式(不要加 --auth)启动mongo: ./mongod
2)进入mongo shell 控制台,先执行show dbs,能够发现只有一个local数据库,这时要建立一个admin数据库:
use admin
db.createUser(
{user: "root",
pwd: "1234",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
注意:roles中的db是必须设置的
3)执行show users,若是看到有了刚才新建的用户则说明建立用户成功
4)关闭mongo:use admin db.shutdownserver()
5)使用验证模式启动mongo: ./mongod --auth
6)再次进入mongo shell 控制台,切换到admin数据库,此时须要受权才能执行其它操做:db.auth("root","1234")完成受权,若显示1则受权成功,因为此用户root只有管理用户的权限,所以若是用该用户执行查询操做(如show collections)会显示拒绝执行
7)接着建立一个新用户,建立用户只能在其相应的数据库中创建。例如要创建一个在数据库pms中拥有读写权限的用户:
use pms
db.createUser(
{ user: "zhangsan",
pwd: "1234",
roles: [ { role: "readWrite", db: "pms" } ]
})
而后能够切换到admin数据库查看全部用户,能够发现已经有新建的这个用户了
8)而后切回pms数据库验证一下,use pms ,而后受权db.auth("zhangsan","1234"),执行show collectionsm,能够发现pms库中的全部collections就展现出来了
以上就是mongo的用户权限管理。详情参考官方文档http://docs.mongoing.com/manual-zh/core/authentication-mechanisms.html
经过./mongod开启了mongo后会发现一旦关闭窗口mongo的进程就被杀死了,因此要设置mongo为守护进程
只要执行sudo ./mongod --fork --logpath ./mongodb.log 便可,注意:一旦设置了--fork 则必须同时设置日志路径(--logpath)
三:写爬虫
接下来根据自身要求写爬虫。详情参考官方文档便可http://doc.scrapy.org/en/0.14/intro/tutorial.html,在此再也不赘述。
至于爬虫与MongoDB对接只需更改pipline.py便可。详情参考官方文档http://doc.scrapy.org/en/1.0/topics/item-pipeline.html
须要注意的是pymongo的版本问题,不知是否因为MongoDB2与MongoDB3差异不小因此对应的pymongo版本也不尽相同,所以注意安装的pymongo版本尽可能与数据库版本相匹配。
因为我写的爬虫都是单一爬虫,每一个爬虫固定爬取一个站点,所以写了一个shell脚本一次执行全部爬虫,同时也方便以后执行的定时任务,注意脚本要放在用scrapy startproject创建的项目的首层文件夹下(若是已经经过脚本设置了路径就不须要了)
四:设置定时任务
以后将爬虫设置为定时任务,定于天天早上8:00定时抓取。
使用linux的crontab功能作定时任务,执行crontab -e进入编辑模式,在最下方加上0 8 * * * 你要执行的命令 便可(表示天天8点定时执行你设定的命令)
若是要将执行结果写入某文件能够如此编辑:
0 8 * * * 你要执行的命令>你想把执行结果写入的文件 2>&1 (EX. 0 8 * * * /home/ubuntu/test>/home/ubuntu/log.txt 2>&1 表示天天早上8点执行home/ubuntu/test脚本并将执行结果写入/home/ubuntu/log.txt文件)
注意:使用定时执行的脚本中若是使用到非系统自己的命令建议使用绝对路径以免出错以及其它没必要要的麻烦。
以上就是scrapy环境搭建,对接mongo并设置定时任务的步骤。
相关参考:
MongoDB官方手册:http://docs.mongoing.com/manual-zh/contents.html
scrapy官方文档:http://doc.scrapy.org/en/1.0/index.html