Spider的用法
- spider的運作流程
-
- 爬取循環過程
- Downloader Middleware的用法
-
- Downloader Middleware的核心方法
- Downloader Middleware執行個體
- Spider Middleware的用法
spider的運作流程
- 定義爬取網站的動作
- 分析爬取下來的網頁
爬取循環過程
- 以初始的URL初始呼哈Request,并設定回調函數
- 在回調函數内分析傳回的網頁内容 1
- 根據傳回結果,進行不同處理 2
Downloader Middleware的用法
Downloader Middleware在整個架構中起作用的位置是兩個。
1.在Scheduler排程出隊列的Request發送給Downloader下載下傳之前
2.在下載下傳後生成的Response發送給Spider之前,也就是可以在生成Response被Spider解析之前對其進行修改
Downloader Middleware的核心方法
- process_request(request,spider):參數request,spider
- process_response(request,response,spider):參數request,response,spider
-
process_exception(request,exception,spider)
隻需要實作至少一個方法,就可以定義一個Downloader Middleware
Downloader Middleware執行個體
建立項目
建立Spider
修改Spider httpbin.py
修改請求時的User-Agent可以通過Downloder Middleware實作一個随機User-Agent的設定
在middlewares.py裡面添加一個RandomUserAgentMiddleware的類
class RandomUserAgentMiddleware():
def __init__(self):
self.user_agents=[
'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)',
'Mozilla/5.0 (windows NT 6.1) AppleWebKit/537.2 (KHTML,like Gecko) Chrome/22.0.1216.0 Safari/537.2',
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1'
]
def process_request(self,request,spider):
request.headers['User-Agent']=random.choice(self.user_agents)
Spider Middleware的用法
- 在Response發送給Spider之前對Response進行處理
- 在Request發送給Scheduler之前對Request進行處理
-
在Item發送給Item Pipeline之前對Item進行處理
核心方法
- process_spider_input(response,spider):當Response被Spider Middleware處理時 3
- process_spider_output(response,result,spider):當Spiderchuli Response傳回結果時必須傳回包含Request或Item對象的可疊代對象 4
- process_spider_exception(response, exception,spider): 當Spider或Spider Middleware的process_spider_input()方法抛出異常時,必須沒麼傳回None,要麼傳回一個包含Response或Item對象的可疊代對象5
-
process_start_requests(start_requests,spider):以Spider啟動的Request為參數被調用,執行的過程類似于process_spider_output(),他沒有相關聯的Response,并且必須傳回Request 6
隻需要實作其中一個方法就可以定義一個Spider Middleware
- 一種傳回結果經處理後儲存,一種解析得到下一個連結,可以利用此連結構造Request并設定新的回調函數 ↩︎
-
- 傳回字典或Item對象,可通過Feed Exports等元件将傳回結果存入檔案,如果有pipeline就用它處理 2.傳回Request,執行後得到response被傳遞給Request中定義的回調函數,在回調函數中
- 包含兩個參數:response,spider ↩︎
- 包含三個參數:response,result,spider ↩︎
- 包含三個參數:response,exception,spider ↩︎
- 包含兩個參數:start_requests,是包含Request的可疊代對象。spider ↩︎