elasticsearch入門系列">elasticsearch入門系列
772
2022-05-30
大家好,我是不溫卜火,是一名計算機學院大數據專業大三的學生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://buwenbuhuo.blog.csdn.net/
官網地址:https://scrapy.org/
本文主要講的是一文帶你快速了解Scrapy框架(版本2.3.0)。
目錄
一. Scrapy的簡單介紹
1.1 什么是Scrapy?
1.2 基本功能
二. 示例展示
2.1 官方案例
2.2 簡單解析
三. Scrapy架構概述
3.1 Scrapy架構的整體流程
3.2 Scrapy框架的簡單介紹
一. Scrapy的簡單介紹
如果想要詳細的查看Scrapy的相關內容可以自行查看官方文檔。
文檔地址如下:https://docs.scrapy.org/en/latest/intro/overview.html#walk-through-of-an-example-spider
1.1 什么是Scrapy?
Scrapy是適用于Python的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結構化的數據。Scrapy用途廣泛,可以用于數據挖掘、監測和自動化測試。
Scrapy吸引人的地方在于它是一個框架,任何人都可以根據需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持。
1.2 基本功能
Scrapy是一個用于爬網網站并提取結構化數據的應用程序框架,可用于各種有用的應用程序,例如數據挖掘,信息處理或歷史檔案。
盡管Scrapy原本是設計用來屏幕抓取(更精確的說,是網絡抓取),但它也可以用來訪問API來提取數據。
二. 示例展示
此部分來源于官方
為了能夠展示出Scrapy帶來的好處,博主將使用最簡單的運行Spider的方式向您介紹Scrapy Spider的示例。
2.1 官方案例
1. 下列代碼為分頁之后從網站http://quotes.toscrape.com抓取著名報價的代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2. 將其放在文本文件中,命名為類似名稱,quotes_spider.py 然后使用以下runspider命令運行Spider
scrapy runspider quotes_spider.py -o quotes.json
1
[{ "author": "Jane Austen", "text": "\u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.\u201d" }, { "author": "Groucho Marx", "text": "\u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.\u201d" }, { "author": "Steve Martin", "text": "\u201cA day without sunshine is like, you know, night.\u201d" }, ...]
1
2
3
4
5
6
7
8
9
10
11
12
13
2.2 簡單解析
1. 查看標簽為humor的界面結構
2. F12(開發者選項)后查看重要標簽點
① 總體
② 文本
3. 解析上述所看到的標簽(都在源碼中進行注釋了)
需要提前知道的一些小知識:在使用構造器的時候,使用XPath和CSS查詢響應非常普遍,他們兩個的快捷鍵分別為:response.xpath()和response.css():
3.最后通過li.next a::attr("href")獲取翻頁后的內容并且做出判斷如果不存在,則自動停止爬取。
三. Scrapy架構概述
3.1 Scrapy架構的整體流程
下圖顯示了Scrapy體系結構及其組件的概述,以及系統內部發生的數據流的概況(由紅色箭頭顯示)。下面包括對這些組件的簡要說明,以及有關它們的更多詳細信息的鏈接。數據流也在下面描述。
Scrapy中的數據流由執行引擎控制,如下所示:
官方原始
博主本人翻譯如下
1.Scrapy Engine(引擎)從Spider中獲取最初的爬取請求。
2.在Scrapy Engine(引擎)獲取到來自于Spider的請求之后,會請求Scheduler(調度器)并告訴他下一個執行請求。
3.Scheduler(調度器)得到信息并把下一個請求返回給Engine。
4.通過Downloader Middlewares(下載器中間件),Scrapy Engine(引擎)把請求發送到Downloader(下載器)。
5.頁面下載完成后, Downloader(下載器)會通過Downloader Middlewares(下載器中間件),生成一個帶有該頁面的Response(響應),并將其發送到Engine。
6.通過Spider Middleware(Spider中間件),Scrapy Engine(引擎)接收到來自于 Downloader(下載器)的響應并將其發送到Spider進行處理。
7.通過Spider Middleware(Spider中間件),Spider處理和響應來自于Scrapy Engine(引擎)的項目和新的需求。
8.Scrapy Engine(引擎)通過Item Pipelines(管道)發送處理的項目,然后把處理的請求返回到Scheduler(調度器),并要求今后可能請求爬行。
9.重復上述過程,直到不再有Scheduler(調度器)的請求為止。
3.2 Scrapy框架的簡單介紹
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(下載中間件):下載器中間件是位于引擎和下載器之間的特定掛鉤,它們在從引擎傳遞到下載器時處理請求,以及從下載器傳遞到引擎的響應。
如果需要執行以下操作之一,請使用Downloader中間件:
在將請求發送到下載器之前處理請求(即,在Scrapy將請求發送到網站之前);
在將接收到的響應傳遞給爬蟲之前,先對其進行更改;
發送新的請求,而不是將收到的響應傳遞給爬蟲;
將響應傳遞給蜘蛛,而無需獲取網頁;
默默地丟棄一些請求。
Spider Middlewares(Spider中間件):一個可以自定擴展和操作引擎和Spider中間通信的功能組件。其是位于引擎和爬蟲之間的特定掛鉤,并且能夠處理爬蟲的輸入(響應)和輸出(項目和請求)。
如果需要,請使用Spider中間件
爬蟲回調的后處理輸出-更改/添加/刪除請求或項目;
然后處理start_requests;
處理爬蟲異常;
根據響應內容,對某些請求調用errback而不是回調。
本次的分享就到這里了,
好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。
如果我的博客對你有幫助、如果你喜歡我的博客內容,請“” “評論”“”一鍵三連哦!聽說的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
碼字不易,大家的支持就是我堅持下去的動力。后不要忘了關注我哦!
HTTP Python Scrapy
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。