scrapy專利爬蟲(二)——請求相關
在這裏筆者將會介紹一些關於發送request的相關內容。
Spider
Spider默認需要填寫三個參數:
name | spider的獨立名稱,必須唯一 |
allowed_domains | 允許爬取的範圍,以專利爬蟲爲例,不會超出專利網站的範圍,所以只需要填寫”pss-system.gov.cn”即可。 |
start_urls | 起始url,spider會首先請求這個參數裏的地址。 |
Request和FormRequest
在Spider之後,如果想繼續深入爬取,可以使用Requset或FormRequest對象建立新的鏈接。
- 需要指定Request/FormRequset的callback參數,這是一個含reponse的回調函數,這樣當請求完成後,scrapy會自動調用所設定的回調函數處理reponse。
- 參數傳遞,Request和FormRequest都用meta這個參數,這個參數會跟隨reponse在callback參數的回調函數中出現。所以可以進行參數傳遞。
- 設定請求的method是get,post等。
- 關於FormRequest,這是一個可以用來發送表單數據的請求,有個formData參數,可帶tuple格式參數
- 其他參數詳見官方文檔
在這裏必須要解釋的一個python關鍵字是yield
,筆者的理解這是一個迭代對象生成器。對於list等可迭代對象,可以用函數的方式生成,只要在函數中使用yield這個關鍵字,代碼在執行的時候會先掛起yield前的所有操作,當對象產生迭代行爲,如for循環時纔會執行前面的代碼。在scrapy中將會經常使用這個關鍵字,發送請求。
下載延時
在settings.py文件中,可以設置請求完成後的文件下載延時DOWNLOAD_DELAY,爲了減輕服務器的壓力這個延時不能設置得太低。
部分中間件
- UserAgentMiddleware
可以用來隨機替換程序發送請求請求的User-Agent參數,僞裝各種瀏覽器,不會輕易被服務器發現。
class RandomUserAgentMiddleware(UserAgentMiddleware):
def process_request(self, request, spider):
request.headers.setdefault('User-Agent', HeadersEngine().getRandomUserAgent())
- HttpProxyMiddleware
可以用來實現ip代理的功能
class ProxyMiddleware:
def process_request(self, request, spider):
request.meta['proxy'] = "http://" + 你的代理ip + : + 你的代理ip的端口號
- 如何開啓中間件
在settings.py文件中,有這樣一段代碼:
DOWNLOADER_MIDDLEWARES = {
'PatentCrawler.middlewares.ProxyMiddleware': 543,
'PatentCrawler.middlewares.RandomUserAgentMiddleware': 542
}
需要在花括號內將定義的中間件填寫上去,並填寫優先級。
源碼下載
讚賞 | |
微信 | 支付寶 |