「爬蟲教程」第六章:Scrapy框架(上)

2020-09-05 計算機網絡啟蒙

回顧一下寫一個爬蟲需要做的一些步驟,使用requests庫發送網絡請求、使用lxml等解析技術對數據進行解析、使用資料庫等方法進行存儲數據,另外還可以在請求網絡的時候進行更換IP、設置請求頭等。

每次爬蟲都要幹這麼多活,如果每次都從零開始寫則比較浪費時間,所以我們需要一個框架,這個框架幫我們把一些基本的爬蟲前奏都準備好了,我們只需要「站在巨人的肩膀上」即可。而Scrapy 框架就是這個「巨人的肩膀」。

它的工作原理如下:

各模塊功能如下:

  1. Engine(引擎): scrap框架的核心部分。負責每個模塊之間的通信、傳遞數據等。
  2. spiders(爬蟲):將需要爬取的連結發送引擎,最後引擎把其他模塊請求回來的數據再發送回爬蟲,然後爬蟲就可以對數據進行解析。(這部分是開發者自己寫的,因為要爬取哪些連接,解析哪些數據是我們自己決定的)
  3. Scheduler(調度器):負責接收引擎發送過來的請求,並按照一定的方式進行排列和整理,決定了連結爬取的順序。
  4. Downloader(下載器):負責接收引擎傳過來的下載請求,然後去網絡上下載對應的數據再交還給引擎。
  5. Item Pipelines(管道):負責將spider(爬蟲)傳遞過來的數據進行保存。具體保存的方式和位置,也是由開發者自行決定。
  6. Downloader Middlewares(下載中間件):處於引擎跟下載器中間,處理下載請求部分。如在此可以設置請求頭、IP位址等。
  7. Spider Middlewares(爬蟲中間件):處於爬蟲跟引擎中間,處理解析部分。

各模塊執行過程如下:

  1. 引擎打開一個網站,找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
  2. 引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。
  3. 引擎向調度器請求下一個要爬取的URL。
  4. 調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。
  6. 引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。
  7. Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
  8. 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。

(從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站。

原理圖及執行過程的描述參考於這篇文章:Scrapy架構圖(工作原理)

如果覺得很不理解沒關係,可以先往下學,之後再回過頭來看這張圖就會豁然開朗了。

6.1 快速入門

使用Scrapy之前需要先安裝:pip install scrapy 。

如果在window系統下,還需安裝一個東西:pip install pypiwin32

創建項目:

進入你想把此項目存放的目錄,使用命令 scrapy startproject 項目名稱 來創建項目。如 scrapy startproject scrapy_demo

用pycharm或其他編輯器打開該項目,項目結構如下:

主要文件的作用:

  1. items.py:用來存放爬蟲爬取下來數據的模型,即要存儲的各欄位。
  2. middlewares.py:用來存放下載/爬蟲中間件的文件。
  3. pipelines.py:用來將items.py中的模型進行持久化存儲。
  4. settings.py:爬蟲的一些配置信息(比如請求頭、多久發送一次請求、IP代理池等許多設置)。
  5. scrap.cfg:項目的配置文件。
  6. spiders包:存放所有的爬蟲文件。

以上步驟只是創建了項目,下一步還需要創建爬蟲(我們在爬蟲文件夾下進行寫代碼)

創建爬蟲前需要先進入到剛才創建的項目中,然後通過命令 scrapy genspider 爬蟲名字 要爬取網站的域名 。如scrapy genspider demo1 baidu.com 注意:爬蟲名字不能跟項目名字重複。

此時,你會發現spiders文件夾下多了個demo1文件,內容如下:

allowed_domains是指以後所有的爬蟲的連結都是在該域名下的,並不會說你要爬取百度的網址,卻給你爬了個谷歌的網址。

stats_urls是指爬蟲剛啟動時是向該連結發送網絡請求。

這些都創建好之後,就可以運行項目了,需要注意的是,在編輯器中是無法直接運行的,需要進入到爬蟲文件夾下運行cmd命令 scrapy crwal 爬蟲名字 運行項目。放心,以後在編輯器中有便捷方式來運行,現在先不介紹。

至此,一個scrapy就成功創建並運行起來了。來回顧一下剛才的操作:

  1. 創建項目:scrapy startproject 項目名字
  2. 創建爬蟲:scrapy genspider 爬蟲名字 爬取的域名 ,注意爬蟲的名字不能與項目名字相同。
  3. 運行爬蟲:scrapy crwal 爬蟲名字

6.2 漸漸深入

pipelines.py文件函數:

__init__(self) 構造函數,創建pipelines時執行

open_spider(self,spider) spider(爬蟲) 被打開時自動執行

process_item(self, item, spider)當爬蟲有item傳入時被調用

close_spider(self,spider) 當spider(爬蟲)被關閉的時候執行

tips: 一般需要存儲文件時在__init__(self)或者open_spider(self,spider) 中編寫打開文件的操作或者連結資料庫操作,在process_item(self, item, spider)中編寫寫入數據的操作,最後在close_spider(self,spider)中關閉文件或資料庫

settings.py文件常用設置:

ROBOTSTXT_OBEY = True 是否遵循機器人協議,我們需要把它改成False
DEFAULT_REQUEST_HEADERS 設置請求頭

DEFAULT_REQUEST_HEADERS = { &39;: &39;, &39;: &39;, 39;User-Agent&39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362&39;scrapy_demo.middlewares.ScrapyDemoDownloaderMiddleware&39;scrapy_demo.middlewares.UserAgentDownloadMiddleware&39;scrapy_demo.middlewares.IPProxyDownloadMiddlleware& 導入命令行from scrapy import cmdline34;scrapy crawl 項目名&39;scrapy_demo.middlewares.ScrapyDemoDownloaderMiddleware&39;scrapy_demo.middlewares.UserAgentDownloadMiddleware&39;scrapy_demo.middlewares.IPProxyDownloadMiddlleware& 在item模型中定義好要保存的數據 39;qsbk.json&39;a&39;utf-8& 此時的item為QsbkItem類型,需要轉成字典才可以變成json text = json.dumps(dict(item), ensure_ascii=False) self.fp.write(text + &39;) return item def close_spider(self, spider): self.fp.close()

記得要在settings中打開pipelines。

小結:

  1. 爬蟲第一步,對協議說「不」
  2. response 對象可以執行xpath、css語法來提取數據。
  3. 提取出來的數據類型可能是Selector或SelectorList ,如果想要獲取其中的字符串或字符串列表,應該執行get或getall 方法
  4. 如果要將數據傳給pipelines處理,可以使用yield
  5. yield 與return 是有區別的,讀者可自行百度查閱資料。


原文連結:https://blog.csdn.net/weixin_43521592/java/article/details/106962079

相關焦點

  • 「爬蟲教程」第六章:Scrapy框架(下)
    CrawelSpider 繼承自Scrapy ,在scrapy基礎上加了新的功能。創建CrawelSpider 的步驟跟scrapy差不多:創建工程: scrapy startproject 項目名創建爬蟲:scrapy genspider -t crawl 爬蟲名 域名 (就這一步不同)運行爬蟲:scrapy crawl 爬蟲名了解CrawelSpider 主要了解下面兩個東西
  • 「爬蟲教程」第六章:Scrapy框架(中)
    而實際我們一般也不會這麼幹,像這種網站一般都可以用域名+相對路徑來訪問到不同的頁面,糗事百科中可以找到 下一頁按鈕 的 a標籤中 的href 就是下一頁的url的相對路徑只需要改動qsbk_spider.py 的內容:import scrapyfrom qsbk.items import QsbkItemclass QsbkSpiderSpider(scrapy.Spider
  • 「小白學爬蟲連載(8)」——scrapy框架入門教程
    接下來將通過爬取scrapy官方提供的一個網站,演示如何利用scrapy爬取網頁信息。可能有的朋友有疑問,之前已經介紹過requests庫,為啥還要用scrapy呢?簡單來講就是requests庫適合小批量爬取網頁內容,如若需要高頻次、大批量爬取網頁還是scrapy比較好用,而且很多公司要求熟練掌握scrapy框架,所以技多不壓身嘛,接下來咱們就好好學學scrapy。
  • Scrapy爬蟲框架新手入門教程
    Downloader(下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,Spider(爬蟲):它負責處理所有Responses,從中分析提取數據,獲取Item欄位需要的數據
  • 進階爬蟲框架Scrapy,告別單一爬蟲
    這些都是進行一些單一的爬取,大規模的爬取的話會很麻煩,今天開始我同大家一起學習一個進階爬蟲框架scrapy,何為框架,就好比一個車,它有了輪子,有了很多設備,我們只需要做簡單的操作就可以啟動它,到達我們想要去的目的地。scrapy作為爬蟲進階部分的必會知識,在對Scrapy有了一定的熟悉後,也想通過這個教程幫助一些想要學習Scrapy的人,畢竟爬蟲還是很有意思的。
  • scrapy爬蟲框架的運用
    # scrapy# 爬蟲框架- 框架- 爬蟲框架- scrapy- pyspider- crawley- scrapy框架介紹- https://doc.scrapy.org/en/latest/- http://scrapy-chs.readthedocs.io
  • 使用Scrapy網絡爬蟲框架小試牛刀
    前言這次咱們來玩一個在Python中很牛叉的爬蟲框架——Scrapy。scrapy 介紹標準介紹Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高性能異步下載,隊列,分布式,解析,持久化等)的具有很強通用性的項目模板。
  • python 爬蟲框架Scrapy使用方法
    Python作為腳本語言,功能非常強大,這裡介紹一下爬蟲框架Scrapy有安裝及使用方法介紹。一、安裝篇python3在安裝scrapy時,需要twisted的支持,但安裝twisted會需要visual studio的支持,詳見本人的另一文章Python 3.5 安裝scrapy無法找到vcvarsall.bat解決方案.
  • 6大Python爬蟲實戰項目(附源碼教程)
    有很多人在剛開始學習Python的時候,都特別期待能用Python寫一個爬蟲腳本,小編這裡總結幾個實戰項目,如果你想學習Python爬蟲的話,可以挑選感興趣的學習【python 網站信息爬蟲】該項目使用 Python 語言及 scrapy 開發一個網絡信息爬蟲,爬取實驗樓的課程數據,並將爬取的課程信息保存在一個
  • Scrapy爬蟲框架結構介紹(各部分組件功能,常用命令)
    Python之srcapy介紹Scrapy是一個健壯的爬蟲框架,可以從網站中提取需要的數據。是一個快速、簡單、並且可擴展的方法。Scrapy使用了異步網絡框架來處理網絡通訊,可以獲得較快的下載速度,因此,我們不需要去自己實現異步框架。並且,Scrapy包含了各種中間件接口,可以靈活的完成各種需求。
  • 簡單使用scrapy爬蟲框架批量採集網站數據
    本篇文章就使用python爬蟲框架scrapy採集網站的一些數據。框架爬取數據的基本流程。 Scrapy的爬蟲項目的創建流程 1.創建一個爬蟲項目 在Pycharm中選擇 Terminal 在 Local 裡面輸入 scrapy startproject +(項目名字
  • Python 爬蟲框架Scrapy 簡單介紹
    Scrapy 簡介Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。Scrapy 使用了 Twisted 異步網絡框架來處理網絡通訊,結構清晰明了,並且包含了各種中間件接口,可以靈活的完成各種需求。
  • python爬蟲小白——scrapy的使用
    看下這裡的代碼,先導入scrapy,定義了一個BaiduSpider類,必須要繼承scrapy.Spider。這裡注意,裡面有3個必須的屬性(name,allowed_domains,start_urls)。name——爬蟲的名字,運行爬蟲的時候就看這個參數。allowed_domains——抓取的域名限制,這是我們剛才在命令行輸入的。
  • Python爬蟲:Scrapy-redis分布式爬蟲講解
    請求對象的持久化去重的持久化實現分布式scrapy-redis只是替換了redis的幾個組件,不是一個新的框架。那麼,在這個基礎上,如果需要實現分布式,即多臺伺服器同時完成一個爬蟲3.2 scrapy_redis的流程
  • 優化python爬蟲scrapy
    我以前重複同樣的項目配置,一個爬蟲下來得調試個一個多小時已經算快的了,畢竟框架好多地方需要修改。以爬取小說網站為例,不同地方在於提取標題、網址Url、內容的xpath不一樣,即只是spiders文件夾下爬蟲文件不一樣而已。
  • Python之初識Scrapy框架
    今天帶大家了解下 Scrapy 框架,先解答三個問題:什麼是 Scrapy 框架呢?它有什麼作用呢?為什麼需要使用它?Scrapy 是 Python 開發的一個快速、高層次的屏幕抓取和web抓取框架,用於抓取 web 站點並從頁面中提取結構化的數據。
  • python爬蟲29 | 使用scrapy爬取糗事百科
    是時候給你說說爬蟲框架了使用框架來爬取數據會節省我們更多時間很快就能抓取到我們想要抓取的內容在現在這個時候(爬蟲28篇之後)講就是一個不錯的時機把褲子穿上就是了哦不是把你缺失的庫安裝上就完事了使用命令來創建一個 scrapy 爬蟲項目比如在這裡我們要創建一個 qiushibaike 的爬蟲項目就可以這樣 
  • 如何使用Scrapy框架進行爬蟲呢?
    Scrapy框架介紹Scrapy是一個基於Twisted的異步處理框架,是純Python實現的爬蟲框架,其架構清晰,模塊之間耦合程度低,可擴展性極強,可以靈活完成各種需求。我們只需要定製開發幾個模塊就可以輕鬆實現一個爬蟲。
  • 小叮噹高級爬蟲(一):爬蟲利器Scrapy
    Scrapy的安裝(1)Windows 安裝(以win7為例):在CMD命令行模式下,直接通過pip命令:pip install Scrapy安裝 Scrapy 框架。那麼小叮噹就在cmd中執行如下的命令:pip install H:\Twisted-18.4.0-cp36-cp36m-win32.whlTwisted成功安裝後,再次執行命令:pip install scrapy安裝Scrapy框架。
  • Python爬蟲框架:scrapy爬取迅雷電影天堂最新電影
    項目開始第一步仍然是創建scrapy項目與spider文件切換到工作目錄兩條命令依次輸入scrapy startproject xunleidianyingscrapy genspider xunleiBT https://www.xl720