1. 程式人生 > 其它 >網路爬蟲_Scrapy框架入門

網路爬蟲_Scrapy框架入門

什麼是Scrapy?(百度百科)

  Scrapy是適用於Python的一個快速、高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。Scrapy用途廣泛,可以用於資料探勘、監測和自動化測試 

  Scrapy吸引人的地方在於它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種型別爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支援。

一、基本功能

  Scrapy是一個適用爬取網站資料、提取結構性資料的應用程式框架,它可以應用在廣泛領域:Scrapy 常應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。通常我們可以很簡單的通過 Scrapy 框架實現一個爬蟲,抓取指定網站的內容或圖片。

  儘管Scrapy原本是設計用來螢幕抓取(更精確的說,是網路抓取),但它也可以用來訪問API來提取資料。

二、架構

 

 

   綠線是資料流向

  Scrapy Engine(引擎)負責Spider、ItemPipeline、Downloader、Scheduler中間的通訊,訊號、資料傳遞等。   Scheduler(排程器):它負責接受引擎傳送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。   Downloader(下載器):負責下載Scrapy Engine(引擎)傳送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理。   Spider(爬蟲):
它負責處理所有Responses,從中分析提取資料,獲取Item欄位需要的資料,並將需要跟進的URL提交給引擎,再次進入Scheduler(排程器)。   Item Pipeline(管道):它負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、儲存等)的地方。   Downloader Middlewares(下載中介軟體):一個可以自定義擴充套件下載功能的元件。   Spider Middlewares(Spider中介軟體):一個可以自定擴充套件和操作引擎和Spider中間通訊的功能元件。

四、Scrapy安裝以及生成專案

   1、下載方式: widows ,開啟一個cmd,安裝需要的包

         pip install wheel

           pip install lxml

         pip install twisted

         pip install pywin32

         pip install scrapy

   2、開啟cmd ,輸入(預設是在C:\Users\Administrator>這個目錄下,你可以自行切換)

      scrapy startproject 專案名

      scrapy genspider 爬蟲名 域名

      scrapy crawl 爬蟲名   (執行爬蟲)

 

     建立後目錄大致頁如下

|-ProjectName #專案資料夾

|-ProjectName #專案目錄

|-items.py #定義資料結構

|-middlewares.py #中介軟體

|-pipelines.py #資料處理

|-settings.py #全域性配置

|-spiders

|-__init__.py #爬蟲檔案

|-baidu.py

|-scrapy.cfg #專案基本配置檔案
    3、用pycharm開啟檔案

    spiders下的baidu.py是scrapy自動為我們生成的

    

下面再看一下spdier專案的配置檔案,開啟檔案settings.py

  • CONCURRENT_ITEMS:專案管道最大併發數
  • CONCURRENT_REQUESTS: scrapy下載器最大併發數
  • DOWNLOAD_DELAY:訪問同一個網站的間隔時間,單位秒。一般預設為0.5*DOWNLOAD_DELAY到1.5 *DOWNLOAD_DELAY之間的隨機值。也可以設定為固定值,由RANDOMIZE_DOWNLOAD_DELAY指定是否固定,預設True隨機。這裡的同一個網站可以是域名也可以是IP,由CONCURRENT_REQUESTS_PER_IP的值決定。
  • CONCURRENT_REQUESTS_PER_DOMAIN:對單個域名的最大併發
  • CONCURRENT_REQUESTS_PER_IP:對單個IP的最大併發,如果值不為0,則CONCURRENT_REQUESTS_PER_DOMAIN引數被忽略,而且DOWNLOAD_DELAY這個引數的同一網站指的是IP
  • DEFAULT_ITEM_CLASS:執行scrapy shell 命令的預設item類,預設scrapy.item.Item
  • DEPTH_LIMIT:爬取的最大深度
  • DEPTH_PRIORITY:正值為廣度優先(BFO),負值為深度優先(DFO),計算公式:request.priority = request.priority - ( depth * DEPTH_PRIORITY )
  • COOKIES_ENABLED: 是否啟用cookie中介軟體,也就是自動cookie管理
  • COOKIES_DEBUG:將請求cookie和響應包含Set-Cookie的寫入日誌
  • DOWNLOADER_MIDDLEWARE:下載器中介軟體和優先順序的字典
  • DEFAULT_REQUEST_HEADERS:用於Scrapy HTTP請求的預設標頭
  • DUPEFILTER_CLASS:去重的類,可以改成使用布隆過濾器,而不使用預設的
  • LOG_ENABLED:是否啟用日誌
  • LOG_FILE:日誌檔案路徑,預設為None
  • LOG_FORMAT:日誌格式化表示式
  • LOG_DATEFORMAT:LOG_FORMAT中的時間格式化表示式
  • LOG_LEVEL:最低日誌級別,預設DEBUG,可用:CRITICAL, ERROR, WARNING, INFO, DEBUG
  • LOG_STDOUT:是否將所有標準輸出(和錯誤)將被重定向到日誌,例如print也會被記錄在日誌
  • LOG_SHORT_NAMES:如果為True,則日誌將僅包含根路徑;如果設定為False,則顯示負責日誌輸出的元件
  • LOGSTATS_INTERVAL:每次統計記錄列印輸出之間的間隔
  • MEMDEBUG_ENABLED:是否啟用記憶體除錯
  • REDIRECT_MAX_TIMES:定義可以重定向請求的最長時間
  • REDIRECT_PRIORITY_ADJUST:調整重定向請求的優先順序,為正值時優先順序高
  • RETRY_PRIORITY_ADJUST:調整重試請求的優先順序
  • ROBOTSTXT_OBEY:是否遵循robot協議
  • SCRAPER_SLOT_MAX_ACTIVE_SIZE:正在處理響應資料的軟限制(以位元組為單位),如果所有正在處理的響應的大小總和高於此值,Scrapy不會處理新的請求。
  • SPIDER_MIDDLEWARES:蜘蛛中介軟體
  • USER_AGENT:預設使用的User-Agent

   我們主要配置下面五個:

    

 

    到這裡我們嘗試用scrapy做一下爬取,開啟spider.py下的baidu.py(取決於你scrapy genspider 爬蟲名 域名時輸入的爬蟲名)

輸入一下程式碼,我們使用xpath提取百度首頁的標題title

 

     

      開啟一個終端cmd,輸入scrapy crawl baidu(爬蟲名),就可以看到一大堆輸出資訊,而其中就包括我們要的內容。但是使用終端執行太麻煩了,而且不能提取資料,我們一個寫一個run檔案作為程式的入口,splite是必須寫的,目的是把字串轉為列表形式,第一個引數是scrapy,第二個crawl,第三個baidu

      

      直接執行就可以在編輯器中輸出了 

    

案例推薦https://blog.csdn.net/ck784101777/article/details/104468780/