一、下載文件和圖片
Scrapy中有兩個類用于專門下載文件和圖片,FilesPipeline和ImagesPipeline,其本質就是一個專門的下載器,其使用的方式就是將文件或圖片的url傳給它(eg:item[“file_urls”])。使用之前需要在settings.py文件中對其進行聲明其導入路徑,并且置于其他ItemPipeline之前。
二、模擬用戶登錄
有許多網站帶有登錄功能,并且有的網站必須登錄了才能獲取信息,故可以利用Scrapy來模擬用戶登錄的行為,進而自動化獲取網頁信息。登錄實質是向服務器發送含有登錄表單數據的HTTP請求。在Scrapy中有一個繼承Request基類的FormRequest類,這個類可以幫助我們模擬用戶登錄的行為。其中最為簡單的方式是(將需要登錄的信息提前以發送請求的格式設定好,直接使用FormRequest的from_response方法就可以實現):
Fd={“number_phone”:******************,”password”:12334455}
Request=FormRequest.from_response(response,formdata=fd)
在實際應用中,一般將登錄和爬取內容進行分開實現,保證邏輯為登錄成功后,再爬取網頁內容。
除了登錄的網頁外,網頁中可能會出現識別驗證碼的情況,其設置的目的是為了防止爬蟲爬取,故要求用戶登錄輸入驗證碼。識別驗證碼的方法有很多,以下是常規的方法:
①OCR識別:tesseract-ocr是基于OCR實現的一個驗證碼識別庫,再Python中可以通過第三方庫pytesseract進行調用。由于是第三方庫故需要對其進行安裝下載,,pip install tesseract-ocr,由于其依賴其他的圖像處理庫,故還需要安裝pip install pillow pytesseract
一般這種的識別率不是很高,多在70%~80%之間,且用于識別較為簡單的驗證碼,
②購買服務:對于復雜的驗證碼其識別較為困難,可以通過借助一些網站實現驗證碼識別服務(大概為1元錢識別100個驗證碼),并且這些平臺提供HTTP服務接口,用戶可以通過HTTP請求將驗證碼圖片發送給平臺,平臺識別后將結果通過HTTP響應返回。類似的這類平臺有阿里云市場上有很多這類服務的識別平臺。
③人工識別驗證碼:在Scrapy下載完驗證碼圖片后,調用image.show()方法將其顯示出來,然后調用Python內置函數input,將人工識別的結果進行輸入即可。
④利用瀏覽器的cookie:在使用瀏覽器登錄網站后,包含用戶身份信息的Cookie會被瀏覽器保存在本地,如果Scrapy爬蟲能直接使用瀏覽器中的Cookie發送?HTTP請求,就可以繞過提交表單登錄的過程。這個過程需要一直持續到人工登錄網站后進行爬取操作。如何獲取cookie,在python中直接進行pip install browsercookie即可進行導入并查看瀏覽器的cookie,使用方法:
Import browsercookie
Cookies=browsercookie.chrome()/firefox()即可
通過瀏覽器的cookie可以直接進行使用,將BrowserCookieMiddleware源碼將其復制到middlewares.py中,并在配置文件中添加如下信息即可,直接使用cookie登錄網站進行數據爬取。
USER_agent=”????”
DOWNLOADER_MIDDLEWARES={
?“scrapy.downloadermiddlewares.cookie.CookieMiddleware”:None,
?“browser_cookie.middlewares.BrowserCookieMiddleware”:701,
}通過這種方式就可以直接利用一個偽裝好的用戶代理來實現利用cookie對直接進行網站登錄對其進行信息爬取。