Scrapy是一個十分強大的爬蟲框架,依賴的庫比較多,至少需要依賴的庫有Twisted 14.0、lxml 3.4和pyOpenSSL 0.14。在不同的平臺環境下,它所依賴的庫也各不相同,所以在安裝之前,最好確保把一些基本庫安裝好。本節就來介紹Scrapy在不同平臺的安裝方法。
知識結構圖
※官方網站:https://scrapy.org
※官方文檔:https://docs.scrapy.org
※PyPI:https://pypi.python.org/pypi/Scrapy
※GitHub:https://github.com/scrapy/scrapy
※中文文檔:http://scrapy-chs.readthedocs.io
這是一種比較簡單的安裝Scrapy的方法(尤其是對于Windows來說),如果你的Python是使用Anaconda安裝的,或者還沒有安裝Python的話,可以使用此方法安裝,這種方法簡單、省力。當然,如果你的Python不是通過Anaconda安裝的,可以繼續看后面的內容。
關于Anaconda的安裝方式,可以查看1.1節,在此不再贅述。
如果已經安裝好了Anaconda,那么可以通過conda命令安裝Scrapy,具體如下:
conda install Scrapy
#樓主分享一個坑:有個網絡對國外IP的訪問有限制,我用公司網絡從Anaconda的服務器上無法下載,但換成手機熱點就好了。
如果你的Python不是使用Anaconda安裝的,可以參考如下方式來一步步安裝Scrapy。
【安裝lxml】
lxml的安裝過程請參見1.3.1節,在此不再贅述,此庫非常重要,請一定要安裝成功。
【安裝pyOpenSSL】
在官方網站下載wheel文件(詳見https://pypi.python.org/pypi/pyOpenSSL#downloads)即可,如下圖所示。
下載后利用pip安裝即可:
pip3 install pyOpenSSL-17.2.0-py2.py3-none-any.whl
【安裝Twisted】
到http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted下載wheel文件,利用pip安裝即可。
比如,對于Python 3.6版本、Windows 64位系統,則當前最新版本為Twisted?17.5.0?cp36?cp36m?win_amd64.whl,直接下載即可,如下圖所示。
然后通過pip安裝:
pip3 install Twisted?17.5.0?cp36?cp36m?win_amd64.whl
【安裝PyWin32】
從官方網站下載對應版本的安裝包即可,鏈接為:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/,如下圖所示。
比如對于Python 3.6版本,可以選擇下載pywin32-221.win-amd64-py3.6.exe,下載完畢之后雙擊安裝即可。
注意,這里使用的是Build 221版本,隨著時間推移,版本肯定會繼續更新,最新的版本可以查看https://sourceforge.net/projects/pywin32/files/pywin32/,到時查找最新的版本安裝即可。
【安裝Scrapy】
安裝好了以上的依賴庫后,安裝Scrapy就非常簡單了,這里依然使用pip,命令如下:
pip3 install Scrapy
等待命令結束,如果沒有報錯,就證明Scrapy已經安裝好了。
在Linux下的安裝方式依然分為兩類平臺來介紹。
CentOS和Red Hat
在CentOS和Red Hat下,首先確保一些依賴庫已經安裝,運行如下命令:
sudo yum groupinstall -y development tools
sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
最后利用pip安裝Scrapy即可:
pip3 install Scrapy
Ubuntu、Debian和Deepin
在Ubuntu、Debian和Deepin平臺下,首先確保一些依賴庫已經安裝,運行如下命令:
sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev
然后利用pip安裝Scrapy即可:
pip3 install Scrapy
運行完畢后,就完成Scrapy的安裝了。
在Mac下,首先也是進行依賴庫的安裝。
在Mac上構建Scrapy的依賴庫需要C編譯器以及開發頭文件,它一般由Xcode提供,具體命令如下:
xcode-select --install
隨后利用pip安裝Scrapy即可:
pip3 install Scrapy
安裝之后,在命令行下輸入scrapy,如果出現類似如下圖所示的結果,就證明Scrapy安裝成功了。
在安裝過程中,常見的錯誤匯總如下。
pkg_resources.VersionConflict: (six 1.5.2 (/usr/lib/python3/dist-packages), Requirement.parse('six>=1.6.0'))
這是six包版本過低出現的錯誤。six包是一個提供兼容Python 2和Python 3的庫,這時升級six包即可:
sudo pip3 install -U six
c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
這是在Linux下常出現的錯誤,缺少libffi庫造成的。什么是libffi?FFI的全名是Foreign Function Interface,通常指的是允許以一種語言編寫的代碼調用另一種語言的代碼。而libffi庫只提供了最底層的、與架構相關的、完整的FFI。此時安裝相應的庫即可。
在Ubuntu和Debian下,直接執行如下命令即可:
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
在CentOS和Red Hat下,直接執行如下命令即可:
sudo yum install gcc libffi-devel python-devel openssl-devel
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build/cryptography/
這是缺少加密的相關組件,此時利用pip安裝即可:
pip3 install cryptography
ImportError: No module named 'packaging'
這是因為缺少packaging包出現的錯誤,這個包提供了Python包的核心功能,此時利用pip安裝即可。
ImportError: No module named '_cffi_backend'
這個錯誤表示缺少cffi包,直接使用pip安裝即可:
pip3 install cffi
ImportError: No module named 'pyparsing'
這個錯誤表示缺少pyparsing包,直接使用pip安裝即可:
pip3 install pyparsing appdirs
【上節】「從零開始Python爬蟲」1.8.1 Pyspider的安裝
1. 安裝wheel
pip install wheel
安裝檢查:
2. 安裝lxml pip install lxml-4.2.1-cp36-cp36m-win_amd64.whl
去https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 下載對應的Python版本
選擇對于的版本進行下載:cp36代表的是Python版本是多少,這里我的版本是python36,操作系統是win64位的,所以我下載文件
lxml-4.2.1-cp36-cp36m-win_amd64.whl
下載下來的Python36 lxml 版本
在DOS下切換到下載的目錄下(cd D:\soft\Scrapy環境搭建)
執行:pip install lxml-4.2.1-cp36-cp36m-win_amd64.whl
3. 安裝zope.interface
到官方網站https://pypi.python.org/pypi/zope.interface#downloads下載對應版本的wheel文件,如果沒有登錄,需要登錄。
在DOS下切換到下載的目錄下(cd D:\soft\Scrapy環境搭建)。
執行:pip install zope.interface-4.5.0-cp36-cp36m-win_amd64.whl
4. 安裝pyOpenSSL
官方網站下載wheel文件,https://pypi.python.org/pypi/pyOpenSSL#downloads
下載pyOpenSSL-17.5.0-py2.py3-none-any.whl
在DOS下切換到下載的目錄下(cd D:\soft\Scrapy環境搭建)。
執行:pip install pyOpenSSL-17.5.0-py2.py3-none-any.whl
5. 安裝Twisted
同理,http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted下載wheel文件,利用pip安裝即可。
如Python 3.6版本,Windows 64位系統,下載
Twisted-17.9.0-cp36-cp36m-win_amd64.whl,然后pip安裝。
在DOS下切換到下載的目錄下
執行:pip install Twisted-17.9.0-cp36-cp36m-win_amd64.whl
6. 安裝pywin32
從官方網站 https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/ 下載對應版本的安裝包安裝。
下載
安裝:
在安裝時會出現提示python3.6-32在注冊表中不存在。
處理windos64位下python3.6安裝pywin32的問題的方法
方法一
這個報的錯是因為注冊表問題,于是百度到下面一段代碼
這段代碼執行以后可以自動將py3.6安裝目錄直接添加進注冊表,檢查了下注冊表,的確出現了。
第一步按“win+R”或者點擊開始菜單,找到運行,在運行輸入框里面輸入“regedit”,如下圖所示:
在HKEY-CURRENT_USER–Software–Python–PythonCore–會發現3.6-32文件夾
方法二: 把注冊表3.6導出,名稱另存為3.6-32,再導入注冊表,重啟電腦即可。
處理完之后,就可以安裝pywin32-220.win-amd64-py3.6
7. 安裝Scrapy pip install Scrapy
最后安裝Scrapy即可,依然使用pip,命令如下:
Scrapy 安裝成功驗證
制作 Scrapy 爬蟲一共需要4步:
步驟:
一. 新建項目(scrapy startproject)
1. 新建一個文件夾存放scrapy項目(D:\爬蟲_script\scrapy_project)。
2.從dos下進入到該目錄下
3.新建一個新的爬蟲項目:scrapy startproject mySpiter
下面來簡單介紹一下各個主要文件的作用:
scrapy.cfg :項目的配置文件
mySpider/ :項目的Python模塊,將會從這里引用代碼
mySpider/items.py :項目的目標文件
mySpider/pipelines.py :項目的管道文件
mySpider/settings.py :項目的設置文件
mySpider/spiders/ :存儲爬蟲代碼目錄
二、明確目標(mySpider/items.py)
我們打算抓取:http://www.itcast.cn/channel/teacher.shtml 網站里的所有講師的姓名、職稱和個人信息。
打開mySpider目錄下的items.py
Item 定義結構化數據字段,用來保存爬取到的數據,有點像Python中的dict,但是提供了一些額外的保護減少錯誤。
可以通過創建一個 scrapy.Item 類, 并且定義類型為 scrapy.Field的類屬性來定義一個Item(可以理解成類似于ORM的映射關系)。
接下來,創建一個ItcastItem 類,和構建item模型(model)。
import scrapy
class ItcastItem(scrapy.Item):
name=scrapy.Field()
level=scrapy.Field()
info=scrapy.Field()
三、制作爬蟲 (spiders/itcastSpider.py)
爬蟲功能要分兩步:
1. 爬數據
scrapy genspider itcast "itcast.cn" import scrapy class ItcastSpider(scrapy.Spider): name="itcast" allowed_domains=["itcast.cn"] start_urls=( 'http://www.itcast.cn/', ) def parse(self, response): pass
其實也可以由我們自行創建itcast.py并編寫上面的代碼,只不過使用命令可以免去編寫固定代碼的麻煩
要建立一個Spider, 你必須用scrapy.Spider類創建一個子類,并確定了三個強制的屬性 和 一個方法。
將start_urls的值修改為需要爬取的第一個url
start_urls=("http://www.itcast.cn/channel/teacher.shtml",)
修改parse()方法
def parse(self, response): filename="teacher.html" open(filename, 'w').write(response.body)
然后運行一下看看,在mySpider目錄下執行:
scrapy crawl itcast
是的,就是 itcast,看上面代碼,它是 ItcastSpider 類的 name 屬性,也就是使用 scrapy genspider命令的唯一爬蟲名。
運行之后,如果打印的日志出現 [scrapy] INFO: Spider closed (finished),代表執行完成。 之后當前文件夾中就出現了一個 teacher.html 文件,里面就是我們剛剛要爬取的網頁的全部源代碼信息。
2. 取數據
<div class="li_txt"> <h3> xxx </h3> <h4> xxxxx </h4> <p> xxxxxxxx </p>
保存數據
scrapy保存信息的最簡單的方法主要有四種,-o 輸出指定格式的文件,,命令如下: