Spider類定義了如何爬去某個網(wǎng)站,包括爬取的動作以及如何從網(wǎng)頁內(nèi)容中提取結構化的數(shù)據(jù),總的來說spider就是定義爬取的動作以及分析某個網(wǎng)頁
工作流程分析
以初始的URL初始化Request,并設置回調(diào)函數(shù),當該request下載完畢并返回時,將生成response,并作為參數(shù)傳給回調(diào)函數(shù). spider中初始的requesst是通過start_requests()來獲取的。start_requests()獲取 start_urls中的URL,并以parse以回調(diào)函數(shù)生成Request
在回調(diào)函數(shù)內(nèi)分析返回的網(wǎng)頁內(nèi)容,可以返回Item對象,或者Dict,或者Request,以及是一個包含三者的可迭代的容器,返回的Request對象之后會經(jīng)過Scrapy處理,下載相應的內(nèi)容,并調(diào)用設置的callback函數(shù)
在回調(diào)函數(shù)內(nèi),可以通過lxml,bs4,xpath,css等方法獲取我們想要的內(nèi)容生成item
最后將item傳遞給Pipeline處理
我們以通過簡單的分析源碼來理解
我通常在寫spiders下寫爬蟲的時候,我們并沒有寫start_requests來處理start_urls中的url,這是因為我們在繼承的scrapy.Spider中已經(jīng)寫過了,我們可以點開scrapy.Spider查看分析
通過上述代碼我們可以看到在父類里這里實現(xiàn)了start_requests方法,通過make_requests_from_url做了Request請求
如下圖所示的一個例子,parse回調(diào)函數(shù)中的response就是父類列start_requests方法調(diào)用make_requests_from_url返回的結果,并且在parse回調(diào)函數(shù)中我們可以繼續(xù)返回Request,如下屬代碼中yield Request()并設置回調(diào)函數(shù)。
spider內(nèi)的一些常用屬性
我們所有自己寫的爬蟲都是繼承與spider.Spider這個類
name
定義爬蟲名字,我們通過命令啟動的時候用的就是這個名字,這個名字必須是唯一的
allowed_domains
包含了spider允許爬取的域名列表。當offsiteMiddleware啟用時,域名不在列表中URL不會被訪問
所以在爬蟲文件中,每次生成Request請求時都會進行和這里的域名進行判斷
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數(shù)據(jù)結構來看看(二) 2017-07-26
