scrapy是python的一個網絡爬蟲框架,關於它的介紹有很多資料,這里不做過多介紹(好吧我承認我還不是很懂...)。我現在還在摸索階段,因為用scrapy爬取的第一個網站非常簡單,不涉及登陸、驗證、翻頁、封號等等問題,僅僅是用spiders中抓取頁面內容,然后在pipelines中存入數據庫,所以現階段了解的東西還不多,在此僅將自己這段時間的學習成果進行總結分享。
一、scrapy框架安裝
(一)需要安裝東西
1、python安裝:我用的版本是2,7,8
2、pywin32安裝——我不明白在Scrapy中它是干嘛使的/(ㄒoㄒ)/~~
3、twisted安裝
Twisted是用Python實現的基於事件驅動的網絡引擎框架,Scrapy使用了Twisted異步網絡庫來處理網絡通訊。
(1)安裝zope.interface
(2)安裝pyopenssl
(3)安裝twisted
4、安裝lxml
5、安裝scrapy
(二)windows系統下的安裝
1、其他包安裝
在windows系統下,除了scrapy本身,其余的包都可以找到exe文件,運行傻瓜安裝即可,有一點需要注意,如果電腦本身安裝了多個版本的python,在安裝的時候選擇指定python的路徑。
2、scrapy安裝
(1)下載源碼——進入源碼——python setup.py install
(2)安裝pip(python的一個包安裝工具)—— pip install Scrapy
3、附我的安裝包網盤下載地址:http://pan.baidu.com/s/1dExYh2p
(三)linux系統下的安裝——Centos
1、安裝方法和命令
1)系統軟件安裝
(1)yum——Centos下的軟件包管理器——yum install python2.7
安裝系統需要的軟件包時,需要用到這個命令,但是有一點,yum會自動安裝最新版。
(2)wget——獲取軟件包,之后可以進行解壓,然后手動安裝(此種方式也可以用於python庫的安裝)
wget -c http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
2)python庫安裝
(1)下載安裝腳本.py文件(wget方法)——python **.py
(2)下載源碼,進入根目錄——python setup.py install
(3)easy_install——easy_install Scrapy
(4)pip——用於安裝python的相關包——pip install Scrapy
2、安裝步驟
1)python安裝——python2.7.6
(1)獲取安裝包:wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
(2)解壓:xz Python-2.7.6.tar.xz
tar xvf Python-2.7.6.tar
(3)進入源碼:cd Python-2.7.6
(4)安裝:
配置:./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
安裝: make && make altinstall
(5)建立軟連接,將系統默認的python指向python2.7:
刪除原來的軟連接:rm -rf /usr/bin/python
建立新的軟連接:ln -s /usr/local/bin/python2.7 /usr/bin/python
現在在命令行輸入python,就是默認的2.7版本了
2)esay_install——方便之后的python庫安裝
(1)方法1:yum install setuptool
我最初用的是這種方法,但是正如前面所述,此種方法默認安裝的最新版本(3.*),它將庫安裝在了python3中。
(2)方法2:wget
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
python ez_setup.py --insecure(因為此時python的默認的是2.7,所以會安裝在2.7下)
之后可以按照python的方式建立easy_install的軟連接,因為此時系統中可能裝有不同版本的setuptools,指定自己需要的版本。
(3)pip安裝——可以利用easy_install 安裝一下pip——easy_install pip
注意:pip/easy_install——對應python2
pip3/easy_install3——對應python3
3)安裝twisted
(1)安裝zope.interface——easy_install zope.interface
(2)安裝gcc:yum install gcc -y
(3)安裝twisted:easy_install twisted
4)安裝pyOpenSSL
(1)依賴:yum install libffi libffi-devel openssl-devel -y
(2)easy_install pyOpenSSL
5)安裝Scrapy
(1)依賴:yum install libxml2 libxslt libxslt-devel -y
(2)easy_install scrapy
問題:在最后一步easy_install scrapy時,報了一個錯誤
Setup script exited with error: command 'gcc' failed with exit status 1????
我懷疑是python-devel的版本問題,可是找了n多資料,也還沒有解決/(ㄒoㄒ)/~~
二、Scrapy應用(windows下)
一)新建一個Scrapy項目
進入指定目錄,按住Shift鍵,點擊鼠標右鍵,選擇在此處打開命令行:
輸入命令:scrapy startproject scrapyLearning--------新建一個項目
tree -/f scrapyLearing 可以查看一下目錄結構
(1)spdiders文件夾下的py文件:爬取數據——爬到網頁;獲取數據
(2)items.py:類似於MVC或者Django框架中的model
(3)pipelines.py:存儲數據,spider.py執行完會自動調用pipilines.py,將爬取到的數據存儲下來
(4)settings.py:一些配置信息,目前我只是加過pipeline,其他還沒有操縱過
二)案例-爬取一個網站的數據,存入到MySql中,代碼的部分截圖如下(部分名字馬賽克了一下...):
1、整個代碼結構
2、item——定義了多了Item,每一個對應一個數據庫表
3、spider
運行命令:scrapy genspider spaiderName “***.com”--------- 新建一個爬蟲(后兩個參數是爬蟲的名字和域名)
(1)把定義的那些item都引入進來
(2)start_urls——要爬取的url,因為此網站要爬取的各個url是連續的,所以就用一個循環即可,程序會依次處理每一個url
(3)xpath方法提取頁面中的元素
(4)return info,把提取到的數據返回——之后會調用pipeline對數據進行存儲
4、pipelines
(1)因為有不同的類型的item,所以首先判斷是哪個類型,然后再分別調用不同的處理方法
(2)之后對數據庫進行操作
5、settings
指定一下需要用到的pipeline——ITEM_PIPELINES = ['crawler.pipelines.CrawlerPipeline']
以上,就是一個完整的運用scrapy框架進行網絡爬取的過程,非常簡單,難點在於分析頁面結構和對於異常情況的處理。當然,本例子爬取的網站比較簡單,像Rules等都還沒有用到,日后用到會進一步總結更新。
6、運行爬蟲
通過命令: scrapy crawl spiderName