scrapy專利爬蟲(二)——請求相關
阿新 • • 發佈:2018-12-17
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
}
需要在花括號內將定義的中介軟體填寫上去,並填寫優先順序。
原始碼下載
讚賞 | |
微信 | 支付寶 |