1. 程式人生 > 實用技巧 >01.scrapy入門

01.scrapy入門

Scrapy快速入門

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架,它使用Twisted這個非同步網路庫來處理網路通訊,架構清晰,並且包含了各種中介軟體介面,可以靈活的完成各種需求。個人認為Scrapy是Python世界裡面最強大的爬蟲框架,沒有之一,它比BeautifulSoup更加完善,BeautifulSoup可以說是輪子,而Scrapy則是車子,不需要你關注太多細節,Scrapy不僅支援Python2.7,Python3也支援。

  • scrapy是框架,類似於車子,會開車。
  • 採用非同步框架,實現高效率的網路採集。
  • 最強大的框架,沒有之一。

安裝和檔案:

  1. 安裝:通過pip install Scrapy
    即可安裝。
  2. Scrapy官方檔案:http://doc.scrapy.org/en/latest
  3. Scrapy中文檔案:https://www.osgeo.cn/scrapy/

注意:

1 在ubuntu上安裝scrapy之前,需要先安裝以下依賴:

sudo apt-get install python-dev python-pip libxml2-dev libxslt-dev zliblg-dev libffi-dev libssl-dev,然後在通過pip install scrapy安裝。

2 如果在windows系統下,提示這個錯誤ModuleNotFoundError:No module named 'win32api'

,那麼使用以下命令可以解決:

pip install pypiwin32pip install pywin32

遇到問題 VC++14.0 Twisted 解決辦法:離線安裝twisted

https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

pip install xxx.whl [twsited.whl的路徑]

安裝完成執行 scrapy bencn 執行測試

Scrapy原理

Scrapy主要包含以下元件:

  • 引擎處理整個系統的資料流,觸發事務(框架核心)
  • 排程器用來接收引擎發過來的請求,壓入佇列中,並在引擎在此請求的時候返回,由它來決定下一個要抓取的網址是什麼,同時去除重複的網址。
  • 下載器用於下載網頁內容,並將網頁內容返回給蜘蛛。
    • Scrapy下載器是建立在Twisted這個搞笑的非同步模型上的。
  • 爬蟲爬蟲主要是幹活的,用於從特定的網頁中提取自己需要的資訊,即所謂的實體。使用者也可以從中提取出連結,讓Scrapy繼續抓取下一個頁面。
  • 專案管道負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清楚不需要的資訊。當頁面被爬蟲解析後,將被髮送到專案管道,並經過幾個特定的次序處理資料。
  • 下載器中介軟體:位於Scrapy引擎和下載器直接的框架,主要是處理Scrapy引擎與下載器直接的請求及響應。
  • 爬蟲中介軟體介於Scrapy引擎和爬蟲直接的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
  • 排程中介軟體介於Scrapy引擎和排程器直接的中介軟體,從Scrapy引擎傳送到排程的請求和響應。

Scrapy的執行流程大概如下

  1. 引擎從排程器中取出一個連結(URL)用於接下來的抓取
  2. 引擎把URL封裝成一個請求(Request)傳給下載器
  3. 下載器把資源下載下來,並封裝成應答包(Response)
  4. 爬蟲解析Response
  5. 解析出實體(Item),則交給實體管道進行進一步的處理
  6. 解析出的是連結(URL),則把URL交給排程器等待抓取

建立專案

Windows下,開啟命令提示符視窗,進入到打算儲存程式碼的目錄中,使用下面的命令建立一個scrapy專案

scrapy startproject 專案名

專案結構

  1. scrapy.cfg:專案的配置檔案
  2. 專案名/:該專案的python模組。之後我們將在此加入程式碼。
  3. 專案名/items.py:用來存放爬蟲爬取下來資料的模型。
  4. 專案名/pipelines.py:用來將items的模型儲存到本地磁碟中。
  5. 專案名/settings.py: 本爬蟲的一些配置資訊(比如請求頭、多久傳送一次請求、ip代理池等)。
  6. 專案名/middlewares.py: 用來存放各種中介軟體的檔案。
  7. 專案名/spiders包:以後所有的爬蟲,都是存放到這個裡面