最近使用scrapy做数据挖掘,使用scrapy定时抓取数据并存入MongoDB,本文记录环境搭建过程以作备忘

OS:ubuntu 14.04  python:2.7.6 scrapy:1.0.5 DB:MongoDB 3

  ubuntu14.04内置python2.7,因此python及pip安装不再赘述。

  一.安装scrapy

  pip install Scrapy  由于scrapy相关依赖较多,因此在安装过程中可能遇到如下问题:

1.ImportError: No module named w3lib.http

    解决:pip install w3lib

  2.ImportError: No module named twisted

    解决: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安装及权限设置

    1.MongoDB安装

    要将爬虫爬取的对象存入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了。

    2.权限管理

    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

    3.设置守护进程

     通过./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

  

linux下scrapy环境搭建的更多相关文章

  1. linux下LAMP环境搭建

    ++++++++++++++++++++++++++++++++++++++++++++++ linux下LAMP环境搭建 ++++++++++++++++++++++++++++++++++++++ ...

  2. 2017.7.18 linux下ELK环境搭建

    参考来自:Linux日志分析ELK环境搭建  另一篇博文:2017.7.18 windows下ELK环境搭建   0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1 ...

  3. linux下LAMP环境搭建尝试

    最近,学习搭建了LAMP服务环境,中间遇到了很多问题,经过不断摸索总算得以解决.为了大家少走弯路,现将相关经验进行总结. linux下软件安装分为自动安装和手动安装两种,自动安装借助工具如yum等,自 ...

  4. linux下PHP 环境搭建

    linux下环境搭建   第一步 安装Apache2 sudo apt-get install apache2   第二步 安装PHP模块 sudo apt-get install php5   第三 ...

  5. Linux 下LAMP环境搭建_【all】

    LAMP = Linux + Apache + Mysql + PHP 0. Linux环境搭建 Linux 系统安装[Redhat] 1.http服务软件分类及企业实战用途介绍 静态程序: Apac ...

  6. Linux 下LNMP环境搭建_【all】

    LNMP = Linux + Nginx + Mysql + PHP 1.0 Linux环境搭建 Linux 系统安装[Redhat] 1.1. FastCGI介绍 1.什么是CGI(common g ...

  7. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建 标签: 交叉编译linuxzedboard 2017-07-04 23:49 19人阅读

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  8. Linux下-LNMP环境搭建博客网站(全过程)

    通常我们所说的LNMP是指一个网站基本的组织框架,即Linux系统支持,Nginx静态服务,Mysql数据库支持以及PHP动态编程语言支持.目前Mysql数据库被Oracle数据库分析公司收购,其创始 ...

  9. Linux下svn环境搭建

    不久前买了一个阿里云服务器,想着在上面搭建一个svn服务方便自己的代码管理.顺便记录下自己的搭建过程 首先,安装服务 通过yum -stall subversion 安装snv,可能install之前 ...

随机推荐

  1. WPF:动态显示或隐藏Listview的某一列

    这几天做项目,需要做个listview满足能够动态显示或隐藏某些列,由于自己是菜鸟水平,查了两天资料也没有想出解决办法.就在我山穷水尽的时候看到了Mgen的一篇博客,给了我很大启发,所以我也决定把自己 ...

  2. Spring源码:IOC原理解析(一)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! IOC(Inversion of Control),即控制反转,意思是将对象的创建和依赖关系交给第三方容器处理,我们要用的时候告诉容器我们 ...

  3. java中方法的定义

    所谓的方法(将方法称为函数)指的就是一段可以被重复调用的代码块. 对于方法的返回值类型有两种使用形式: · 有数据返回:返回值类型就使用 Java 中定义的数据类型: · 无数据返回:使用 void ...

  4. 基于Json序列化和反序列化通用的封装

    1. 最近项目已经上线了 ,闲暇了几天 想将JSON的序列化以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了.但是我想封装一套为自己开发的项目使用.方便 ...

  5. editPuls 常用知识

    1.创建模板 1).创建模板页(*.html) 2).Tools->Preferences->File->Templates->HTML->file name重新选定模板 ...

  6. 使用cxf做webservice接口调用

    一.服务端 建javaweb工程,去官网下载所需的cxf接口发布的jar包,导入到工程.官网地址:http://cxf.apache.org/download.html 1.建立调用接口 packag ...

  7. Java - extends

    继承 一个类得到了另一个类当中的成员变量和成员函数. Java只支持单继承,一个父类可以有多个子类. 使用继承,可减少重复代码.把重复代码放入父类中.需要添加共同的成员变量或函数时可以直接操作父类. ...

  8. C++学习(五)入门篇——基本类型

    面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配. 内置C++分成两种类型:基本类型和复合类型 1.简单变量 程序需要存储信息时,必须记录三个基本属性 (1)信息将存储在哪 (2)要存储 ...

  9. hdu_5810:Balls and Boxes(期望)

    这题似乎就是纯概率论.. E(V)=D(X_i)=npq (p=1/m,p+q=1) #include<bits/stdc++.h> using namespace std; typede ...

  10. 微信小程序怎么用?线下商家最适合玩小程序

    随着微信小程序不断地释放新功能,许多行业越来越关注小程序,目前已经有不少餐饮和线下传统零售企业开始谋划利用好小程序.但是,线下商业有着复杂的场景,如何针对自己行业的特点和需求开发出属于自己的小程序,是 ...