Scrapy 介紹
Scrapy,Python開發的一個快速,高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動化測試。
Scrapy吸引人的地方在于它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。
Scratch,是抓取的意思,這個Python的爬蟲框架叫Scrapy,大概也是這個意思吧,就叫它:小刮刮吧。
Scrapy 使用了 Twisted異步網絡庫來處理網絡通訊。整體架構大致如下
Scrapy主要包括了以下組件:
引擎(Scrapy)
用來處理整個系統的數據流處理, 觸發事務(框架核心)
調度器(Scheduler)
用來接受引擎發過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
下載器(Downloader)
用于下載網頁內容, 并將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
爬蟲(Spiders)
爬蟲是主要干活的, 用于從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析后,將被發送到項目管道,并經過幾個特定的次序處理數據。
下載器中間件(Downloader Middlewares)
位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
爬蟲中間件(Spider Middlewares)
介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
調度中間件(Scheduler Middewares)
介于Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
Scrapy運行流程大概如下:
1.引擎從調度器中取出一個鏈接(URL)用于接下來的抓取
2.引擎把URL封裝成一個請求(Request)傳給下載器
3.下載器把資源下載下來,并封裝成應答包(Response)
4.爬蟲解析Response
5.解析出實體(Item),則交給實體管道進行進一步的處理
6.解析出的是鏈接(URL),則把URL交給調度器等待抓取
一、安裝
因為python3并不能完全支持Scrapy,因此為了完美運行Scrapy,我們使用python2.7來編寫和運行Scrapy。
命令輸入cmd打開python窗口
輸入
pip install Scrapy
注:windows平臺需要依賴pywin32,請根據自己系統32/64位選擇下載安裝,https://sourceforge.net/projects/pywin32/
其它可能依賴的安裝包:lxml-3.6.4-cp27-cp27m-win_amd64.whl,VCForPython27.msi百度下載即可
ubuntu安裝
apt-get install python-dev python-pip libxml12-dev libxstl1-dev
zlig1g-dev libssl-dev
pip install scrapy
二、基本使用
1、創建項目
在開始爬取之前,您必須先在要保存的目錄下進入python黑窗口,創建一個新的Scrapy項目,進入你打算儲存代碼的目錄中,運行下列命令:
scrapy startproject zhilian
可以根據窗口提示輸入下面一行代碼:
cd zhilian
此時輸入你想爬取的網址:
scrapy genspider zhaopin zhaopin.com
呈現結果如圖:
主要看目錄列表:
文件說明:
items.py 設置數據存儲模板,用于結構化數據,如:Django的Model
pipelines 數據處理行為,如:一般結構化的數據持久化
settings.py 配置文件,如:遞歸的層數、并發數,延遲下載等
spiders 爬蟲目錄,如:創建文件,編寫爬蟲規則
注意:一般創建爬蟲文件時,以網站域名命名
2.簡單的爬取智聯招聘網頁HTML
1.首先,在spiders下的zhilian.py中對allowed_domains=" "和start_urls='' "根據網頁地址進行調整,其次定義爬蟲獲取到的響應數據處理類
2.設置settings.py
將下列代碼取消注釋,并修改為圖片內容,增加請求頭內容
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
如下圖:
3.運行程序
在項目目錄下打開命令窗口輸入:
scrapy crawl ZhilianSpider
在目錄下會有zhilian.html.如圖: