linux下scrapy環境搭建


最近使用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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM