1. 程式人生 > >scrapy專利爬蟲(二)——請求相關

scrapy專利爬蟲(二)——請求相關

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
}

需要在花括號內將定義的中介軟體填寫上去,並填寫優先順序。

原始碼下載

讚賞
微信支付 支付寶
微信 支付寶