Scrapy簡介
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架,我們只需要實現少量的代碼,就能夠快速的抓取。
Scrapy使用了Twisted異步網絡框架,可以加快我們的下載速度。
也就是說,你是用scrapy後就不用自行在考慮多任務(多線程、多進程、協程)等問題了,這些問題scrapy這個框架會實現幫你處理好你所需要的。同時Scrapy中有很多方便的功能,比如說連接提取器,圖片下載器,自動登錄等。
下圖爲一個scrapy爬蟲框架的流程。
從上圖可以看出,使用Scrapy的一個大致流程,
- 指定第一個URL放入調度器
- 下載器會從調取器中讀取URL並自動訪問下載,傳入爬蟲
- 爬蟲將提取的URL在此傳入調度器,提取的數據傳入管道進行保存
- 重複上述操作,直到完成調度器中所有的URL
初看scrapy可能你會覺得這比requests不是根據複雜了嗎。的確相比於requests,scrapy的學習成本更高,但學會後,使用起來會比requests要更加高效,這裏的高效不僅是爬取效率上,在代碼編寫上同樣更加高效,寫更少的代碼就能實現更豐富的功能。scrapy是一個爬蟲框架,而requests是一個庫。
Scrapy安裝
pip install scrapy
,pycharm也可以使用可視化界面安裝,上面的操作就不解釋了,有Python基礎的應該不會看不懂。如果你連基本的Python基礎都沒有,學習Scrapy對你來說會比較困難,建議先把Python基礎學好。
常見安裝報錯
Scrapy是一個依賴衆多庫(zope.interface、Twisted、pyOpenSSL、pywin32…)的庫,安裝他時會出現各式各樣的問題,大部分問題是因爲缺少c++環境導致的,而需要用到c++環境的庫是Twisted,也就是說大部分導致我們安裝失敗的原因是Twisted造成的
首先你要確保你真的擁有c++環境
如果沒有可以去微軟官網下載
如果你已經有c++環境卻還是報了當前的錯誤,你可以使用下列方法去嘗試解決(碰到此問題大多數可能是因爲使用了虛擬環境造成的,在虛擬環境中就算安裝了C++環境也經常出現無法找到的情況。)
虛擬環境報錯解決方法
現在全局環境中安裝scrapy,然後在將其移動到虛擬環境中,python會講包放在Python安裝目錄\Lib\site-packages
下,全局環境中默認只有pip和setuptools兩個包,我們可以現在全局環境中安裝好scrapy再將其移動到虛擬環境中,虛擬環境的位置也同樣在Python虛擬環境目錄\Lib\site-packages
中
如果全局環境中安裝scrapy還是報錯,我們可以嘗試下載離線的Twisted(http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted)進行安裝,
安裝好後的在Python環境\Scripts
目錄下能看見一個scrapy.exe纔算成功
Scrapy官方建議
儘管可以使用pip在Windows上安裝Scrapy,但我們建議您安裝Anaconda或Miniconda並使用conda - forge頻道中的軟件包 ,這樣可以避免大多數安裝問題。
PS:看來官方是知道pip存在的一堆問題,希望能儘快解決。
Scrapy創建
安裝完上述環境後你可以先嚐試在cmd中輸入scrapy
如果沒有報錯,這證明安裝成功已經可以使用了,如果沒有出現此提示,請將Scrapy所在的環境(一半不出現的問題就是你安裝到了虛擬環境,只需要將虛擬環境放入全局變量中即可)
我們先cd到一個存放爬蟲的目錄,因爲執行下面的語句會自動生成一個文件夾其中攜帶一些配置文件
scrapy startproject 爬蟲名(只支持英文和下劃線)
創建好爬蟲項目文件夾後我們先cd進入創建的爬蟲項目,然後執行下列語句,即可生成一個爬蟲目標
scrapy genspider 爬蟲名 "爬取網址"
scrapy genspider demo "demo.cn"
生成的爬蟲會保存在spiders中
項目目錄解析
我們使用scrapy startproject
會自動幫我們創建一些目錄和文件
目錄 | 作用 |
---|---|
spiders | 存放爬蟲文件,其中包含爬蟲的業務邏輯(爬取那些網站) |
items | 封裝數據 |
middlewares | 中間件(爬蟲中間件和下載中間件) |
pipelines | 管道,數據保存 |
settings | 設置文件 |
啓動爬蟲
我們創建的爬蟲(scrapy genspider 爬蟲名 "爬取網址"
)會自動進入spiders文件夾中
如何啓動爬蟲,有兩種方法,一直是從命令行啓動
啓動爬蟲我們有兩種方式
- 命令行啓動
命令行輸入
scrapy crawl 爬蟲名
- .py文件啓動
在項目文件夾中創建一個.py文件,名稱隨意(和scrapy.cfg同級)
其中寫入下列代碼
from scrapy import cmdline
cmdline.execute("scrapy crawl 爬蟲名".split())
啓動此項目即可啓動指定的爬蟲