Python爬蟲實戰-使用Scrapy框架爬取土巴兔(一)
Scrapy is an application framework for crawling web sites and extracting structured data which can be used for a wide range of useful applications, like data mining, information processing or historical archival.
上面這段話取自官方文件。翻譯過來就是:
Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。
Scrapy可以說是目前Python爬蟲框架中最成熟最穩定的框架之一,所以我們使用Scrapy框架來做爬蟲開發可以說是好鋼用在刀刃上。
該系列其它文章:
- Python爬蟲實戰-使用Scrapy框架爬取土巴兔(二)
- Python爬蟲實戰-使用Scrapy框架爬取土巴兔(三)
- Python爬蟲實戰-使用Scrapy框架爬取土巴兔(四)
- Python爬蟲實戰-使用Scrapy框架爬取土巴兔(五)
該篇文章主要講Scrapy架構、工作流程、優點及開發環境的搭建,接下來我們進入正題。
一.初識Scrapy
Scrapy架構圖:
通過清晰的架構圖我們可以瞭解到Scrapy運作的流程。
1.Scrapy的五大模組:
- 引擎(Scrapy Engine):Scrapy使用Twisted來作為框架的核心,Twisted是一個基於事件驅動的網路引擎框架。所以引擎主要是用來處理整個系統的資料流,觸發各個事件。
- 排程器(Scheduler):排程器接受引擎傳來的資料,維護需要爬取的網頁URL佇列,並通過規定的排程機制將URL建立為下載請求。
- 管道(Item Pipeline):將爬取到的內容轉換為實體物件,並對實體物件做有效性驗證、持久化等等自定義的操作。
- 下載器(Downloader):主要是進行網頁的http請求及響應,負責產生資料並返回資料。
- 爬蟲(Spiders):在爬蟲中,定義爬取URL的規則和網頁資訊的提取規則。
2.Scrapy的三個中介軟體起到串聯各個模組的作用:
- 下載器中介軟體(Downloader Middlewares):位於Scrapy引擎和下載器之間的中介軟體,在Scrapy引擎和下載器中間負責傳遞下載內容的請求和資料。
- 排程中介軟體(Scheduler Middewares):位於Scrapy引擎和排程之間的中介軟體,Scrapy引擎和排程器之間負責傳遞排程的請求和響應。
- 爬蟲中介軟體(Spider Middlewares):位於Scrapy引擎和爬蟲之間的框架,主要工作是處理爬蟲的響應輸入和請求輸出。
3.Scrapy的工作流程:
- 引擎開啟一個網站,找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
- 引擎從Spider中獲取到第一個要爬取的URL並在排程器(Scheduler)中建立request來進行排程。
- 引擎向排程器請求下一個要爬取的URL。
- 排程器返回下一個要爬取的URL給引擎,引擎將URL通過下載中介軟體(請求(request)方向)轉發給下載器(Downloader)。
- 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中介軟體(返回(response)方向)傳送給引擎。
- 引擎從下載器中接收到Response並通過Spider中介軟體(輸入方向)傳送給Spider處理。
- Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
- 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給排程器。
- (從第二步)重複直到排程器中沒有更多地request,引擎關閉該網站。
4.Scrapy的優點:
我們為什麼要使用Scrapy,而不使用其他爬蟲框架,除了成熟穩定之外,還有很多其他優勢。
- 使用可讀性較好的xpath代替正則處理html解析
- 支援shell方便除錯
- 高擴充套件,低耦合,方便定製功能
- 編碼自動檢測以及健壯的編碼支援
- 有強大的統計功能和log系統
- 支援多URL非同步請求
二.開發環境的搭建
1.安裝python環境
目前Scrapy同時支援python2.7版本和python3.3以上,所以可以根據自己需要選擇不同的Python版本。本文針對的開發環境使用的是python3.5,如果你是初學者建議使用python3開始學習,不用考慮python的許多歷史包袱。
Python各個版本下載地址:https://www.python.org/downloads
2.安裝Scrapy
由於官方文件有Scrapy安裝教程,這裡不做詳細說明,安裝方法可以參考官方文件。
這裡說下Windows下可能會遇到的問題,因為Scrapy依賴部分第三方框架,所以在安裝的Scrapy的同時也會一起安裝相關的第三方框架。部分第三方框架可能會出現安裝失敗的情況,如:
- Twisted在Windows環境下安裝失敗,需要手動下載Twisted在下的Windows安裝包http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted。根據自己的windows和python版本選擇對應下載安裝包。
如果下載的安裝包是"Twisted-17.1.0-cp35-cp35m-win_amd64.whl",則呼叫命令
pip install Twisted-17.1.0-cp35-cp35m-win_amd64.whl
- Lxml在Windows環境下安裝失敗,與Twisted情況相似。需要手動下載安裝包。http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml。
如果下載的安裝包是"lxml‑3.7.3‑cp35‑cp35m‑win_amd64.whl",則呼叫命令
pip install lxml‑3.7.3‑cp35‑cp35m‑win_amd64.whl
3.安裝MongoDB
這裡使用MongoDB來儲存爬取到的網頁上的資訊,如文章的標題、類別、圖片儲存路徑等等。
MongoDB安裝相對簡單。先下載安裝包https://www.mongodb.com/download-center,如果安裝過程中有疑問可以參考官方文件。Windows下也可以參考這篇文章MongoDB下載與安裝,作者講的很詳細。
MongoDB安裝完後還需要安裝第三方庫pymongo,我們需要pymongo在python程式碼中操作MongoDB。
安裝命令:
pip install pymongo
4.安裝Redis
Redis是一個資料結構為key-value鍵值對的儲存系統。在爬蟲中使用Redis主要是為了存取快取,記錄自動更新Http代理的時間,對已經爬取的網頁URL進行過濾等等。
Redis的安裝教程和下載地址在官網連結中https://redis.io/download。
Redis還目前沒有Windows版本,所以如果要安裝Windows版本,只能使用Microsoft Open Tech group 提供的Redis版本。Github中有下載地址和安裝教程https://github.com/ServiceStack/redis-windows。
接著安裝第三方庫redis
安裝命令:
pip install redis
5.安裝第三方庫
- pillow:處理對圖片的裁剪、儲存
pip install pillow
- requests:基於 urllib,採用Apache2 Licensed開源協議的HTTP庫
pip install requests
- schedule:使用schedule進行定時任務管理
pip install schedule
6.安裝IDE
推薦使用PyCharm,可以說是目前做python開發最好的IDE,PyCharm社群版提供的功能就已經足夠強大了。
最後
現在我們對Scrapy已經有了基本的認識,開發環境搭建也已經完成,接下來就開始進行程式碼編寫。Python爬蟲實戰-使用Scrapy框架爬取土巴兔(二)
附:
詳細的專案工程在Github中,如果覺得還不錯的話記得Star哦。
相關文章
- Python爬蟲 ---scrapy框架初探及實戰Python爬蟲框架
- Python爬蟲—Scrapy框架Python爬蟲框架
- python爬蟲Scrapy框架Python爬蟲框架
- python網路爬蟲(14)使用Scrapy搭建爬蟲框架Python爬蟲框架
- 爬蟲實戰scrapy爬蟲
- Python爬蟲框架:scrapy爬取高考派大學資料Python爬蟲框架
- Scrapy爬蟲框架的使用爬蟲框架
- 爬蟲框架-scrapy的使用爬蟲框架
- Scrapy爬蟲框架爬蟲框架
- Python爬蟲教程-30-Scrapy 爬蟲框架介紹Python爬蟲框架
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- Scrapy框架的使用之Scrapy通用爬蟲框架爬蟲
- Python爬蟲 --- 2.3 Scrapy 框架的簡單使用Python爬蟲框架
- 爬蟲(9) - Scrapy框架(1) | Scrapy 非同步網路爬蟲框架爬蟲框架非同步
- Python爬蟲教程-31-建立 Scrapy 爬蟲框架專案Python爬蟲框架
- 初識Scrapy框架+爬蟲實戰(7)-爬取鏈家網100頁租房資訊框架爬蟲
- python 爬蟲對 scrapy 框架的認識Python爬蟲框架
- Python3爬蟲(十八) Scrapy框架(二)Python爬蟲框架
- 【Python篇】scrapy爬蟲Python爬蟲
- Python爬蟲深造篇(四)——Scrapy爬蟲框架啟動一個真正的專案Python爬蟲框架
- Python爬蟲實戰詳解:爬取圖片之家Python爬蟲
- 爬蟲實戰(一):爬取微博使用者資訊爬蟲
- Python Scrapy 爬蟲(二):scrapy 初試Python爬蟲
- Python 爬蟲實戰Python爬蟲
- Scrapy框架的使用之Scrapy爬取新浪微博框架
- python網路爬蟲--專案實戰--scrapy嵌入selenium,晶片廠級聯評論爬取(6)Python爬蟲晶片
- 學好Python不加班系列之SCRAPY爬蟲框架的使用Python爬蟲框架
- 使用python的scrapy來編寫一個爬蟲Python爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- 爬蟲--Scrapy簡易爬蟲爬蟲
- Python爬蟲筆記(4):利用scrapy爬取豆瓣電影250Python爬蟲筆記
- Python爬蟲實戰:爬取淘寶的商品資訊Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 為什麼使用Scrapy框架來寫爬蟲?框架爬蟲
- Python爬蟲教程-32-Scrapy 爬蟲框架專案 Settings.py 介紹Python爬蟲框架
- Python學習筆記——爬蟲之Scrapy專案實戰Python筆記爬蟲
- 《Python3網路爬蟲開發實戰》PDF+原始碼+《精通Python爬蟲框架Scrapy》中英文PDF原始碼...Python爬蟲原始碼框架
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- 爬蟲教程——用Scrapy爬取豆瓣TOP250爬蟲