scrapy框架入門
最近在學習爬蟲,這里是MOOC北理嵩天老師的課程筆記,適合小白入門。
如果想自己寫一個scrapy框架出來,建議自己鉆研幾個實例,理解每一行語句的作用,應該三天左右就可以上手。
當然,我們還需要掌握re, xpath, BeautifulSoup 等基礎知識。
歡迎大佬指正~
數據,包括用戶提供的網絡爬蟲請求,以及從網絡上獲取的相關內容,在這些結構直接相互流動形成了數據流。
路徑1:請求通過SPIDERS到達ENGINE之后, ENGINE將這個爬去請求轉發給了SCHEDULER模塊(負責對爬去請求調用)。
路徑2:從SCHEDULER到達ENGINE(獲得下一個要爬取的網絡請求,這時的網絡請求是真實的), 再到達DOWNLOADER(拿到請求后,連接互聯網,并且爬取相關網頁,形成響應RESPONSE),并且數據最終返回到SPIDERS模塊。
路徑3:從SPIDERS(處理獲得的響應,獲得兩個數據類型) 經過ENGINE,到達ITEM PIPELINES模塊,以及SCHEDULER模塊。
數據的入口是SPIDER(解析返回的響應;產生爬取項;產生額外的爬取請求), 出口是ITEM PIPELINES(以流水線方式處理spider產生的爬取項;由一組操作順序組成,類似流水線,每個操作都是一個item pipeline類型;清理,檢驗,查重,還可以將數據儲存到數據庫)。
這兩個模塊是需要用戶編寫的
以下三個模塊不需要用戶修改:
engine:
控制所有模塊之間的數據流
根據條件觸發事件
downloader
根據請求下載網頁
scheduler
對所有爬取請求進行調度管理
但是如果用戶想修改呢?所以就有了中間鍵 downloader middleware,從而實現對這三者可配置的控制
(另一個中間鍵)
requests庫和Scrapy庫的比較:
Scrapy主要是運用命令行(不是圖形界面)更容易自動化,適合腳本控制。
使用Scrapy庫,首先需要產生一個Scrapy框架
開始一個工程
1 命令行下建立一個Scrapy爬蟲工程
部署的概念是將爬蟲放在特定的服務器上,并且在服務器配置好相關的接口。
對于本機使用的爬蟲來講,不需要改變部署的配置文件
spider 內部結構:
2 在工程中產生一個爬蟲
這條命令的作用,是生成一個名稱為demo的spider。
這時,在spider下生成了一個文件,叫demo.py。
如果不用這個命令來生成py,我們也可以手動生成
我們可以看一下demo.py 的文件內部代碼,它是面向對象方式編寫的一個類,類的名稱叫做DemoSpider。
allowed_domains意思是,在爬取時,只能爬取這個域名以下的。
start_urls 是初始頁面
def parse是解析頁面的空的方法,用于處理響應,解析內容形成字典,發現新的url爬取請求
3 配置產生的spider爬蟲
4 運行爬蟲,獲取網頁
這時我們需要在命令行下執行這條命令
可以看到,demo爬蟲被執行,捕獲的頁面存儲在demo.html中
yield關鍵字的使用:
而生成器被喚醒時,所使用的局部變量和之前的值是一致的。(也就是說,一個函數,執行到某一個位置,產生了一個值。然后,它被凍結了。再次被喚醒時,還是從這個位置繼續被執行,并不斷產生值。這樣的函數就叫做生成器)
這里給一個例子:
def gen(n):
for i in range (n):
yield i**2
它能夠產生所以小于n的整數的平方值
spider對html頁面進行解析,能解析出很多的信息,而item類是這些信息中非常特殊的一種。在scrapy框架下,item類是由字典類型來定義的。
后兩個參數只能有一個發揮作用
感謝您的閱讀!
智能推薦
Python爬蟲day7—Scrapy框架入門
Scrapy爬蟲框架入門 概述 Scrapy是Python開發的一個非常流行的網絡爬蟲框架,可以用來抓取Web站點并從頁面中提取結構化的數據,被廣泛的用于數據挖掘、數據監測和自動化測試等領域。下圖展示了Scrapy的基本架構,其中包含了主要組件和系統的數據處理流程(圖中帶數字的紅色箭頭)。 組件 Scrapy引擎(Engine):Scrapy引擎是用來控制整個系統的數據處理流程。 調度器(Sche...
Python爬蟲學習教程:Scrapy爬蟲框架入門
Python爬蟲學習教程:Scrapy概述 Scrapy是Python開發的一個非常流行的網絡爬蟲框架,可以用來抓取Web站點并從頁面中提取結構化的數據,被廣泛的用于數據挖掘、數據監測和自動化測試等領域。下圖展示了Scrapy的基本架構,其中包含了主要組件和系統的數據處理流程(圖中帶數字的紅色箭頭)。 組件 Scrapy引擎(Engine):Scrapy引擎是用來控制整個系統的數據處理流程。 調度...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...