1.持久化存儲
- 編碼流程:
1.數據解析
2.封裝item類
3.將解析的數據存儲到實例化好的item對象
4.提交item
5.管道接收item而後對item進行io操做
6.開啓管道
- 注意事項:
- 將同一份數據存儲到不一樣的平臺中:
- 管道文件中一個管道類負責將item存儲到某一個平臺中
- 配置文件中設定管道類的優先級
- process_item方法中return item的操做將item傳遞給下一個即將被執行的管道類
2.全站數據爬取
- 手動請求的發送:
- 設定一個通用的url模板
- 手動i請求的操做寫在哪裏:parse方法
- yield scrapy.Request(url,callback)
3.五大核心組件前端
猛擊它瀏覽器
4.post請求
- start_requests(self)
- post請求的手動發送:yield scrapy.FormRequest(url,callback,formdata)
- COOKIES_ENNABLE = False
5.日誌等級和請求傳參
- LOG_LEVEL = 'ERROR'
- LOG_FILE = 'path'
- 請求傳參的應用場景:
- 爬取且解析的數據沒有在同一張頁面
- 在請求方法中使用meta(字典)參數,該字典會傳遞給回調函數
- 回調函數接收meta:response.meta['key']服務器
- 下載中間件:
- 做用:批量攔截請求和響應
- 攔截請求:
1.篡改請求頭信息(User-Agent):
2.設置相關請求對象的代理ip(process_exception中)
- selenium如何做用在scrapy中:
- 實例化一個瀏覽器對象(一次):spider的構造方法中cookie
- 在scrapy中如何給全部的請求對象儘量多的設置不同的請求載體身份標識
- UA池,process_request(request)
- 在scrapy中如何給發生異常的請求設置代理ip
- ip池,process_exception(request,response,spider):request.meta['proxy'] = 'http://ip:port'
- 將異常的請求攔截到以後,經過代理ip相關的操做,就能夠將改異常的請求變成非異常的請求,而後必須從新
對該請求進行從新的請求發送:return request
- 簡述下載中間件的做用及其最重要三個方法的做用
- process_request:攔截全部非異常的請求
- process_response:攔截全部的響應對象
- process_exception:攔截髮生異常的請求對象,須要對異常的請求對象進行相關處理,讓其變成
正常的請求對象,而後經過return request 對該請求進行從新發送
- 簡述scrapy中何時須要使用selenium及其scrapy應用selenium的編碼流程
- 實例化瀏覽器對象(一次):spider的init方法
- 須要編寫瀏覽器自動化的操做(中間件的process_response)
- 關閉瀏覽器(spider的closed方法中進行關閉操做)併發
- 圖片懶加載scrapy
這是一種前端技術,緩解服務器壓力,給用戶更好的體驗,他只對屏幕內的圖片進行加載,其餘的圖片使用僞屬性隱藏起來,當檢測到屏幕要顯示時,改變爲原生屬性,因此能夠經過僞屬性名獲取圖片地址。ide
- 如何提高scrapy爬取數據的效率:函數
默認scrapy開啓的併發線程爲32個,能夠適當進行增長。在settings配置文件中修改CONCURRENT_REQUESTS = 100值爲100,併發設置成了爲100。post
下降日誌級別:
在運行scrapy時,會有大量日誌信息的輸出,爲了減小CPU的使用率。能夠設置log輸出信息爲INFO或者ERROR便可。在配置文件中編寫:LOG_LEVEL = ‘INFO’網站
禁止cookie:
若是不是真的須要cookie,則在scrapy爬取數據時能夠禁止cookie從而減小CPU的使用率,提高爬取效率。在配置文件中編寫:COOKIES_ENABLED = False
禁止重試:
對失敗的HTTP進行從新請求(重試)會減慢爬取速度,所以能夠禁止重試。在配置文件中編寫:RETRY_ENABLED = False
減小下載超時:
若是對一個很是慢的連接進行爬取,減小下載超時能夠能讓卡住的連接快速被放棄,從而提高效率。在配置文件中進行編寫:DOWNLOAD_TIMEOUT = 10 超時時間爲10s
- crawlSpider
crawlSpider全站數據爬取
- crawlSpider就是spider一個子類(派生)
- crawlSpider具備的機制:
- 鏈接提取器
- 規則解析器
- 建立爬蟲文件: scrapy genspider -t crawl spiderName www.xxx.com
--此指令對比之前的指令多了 "-t crawl",表示建立的爬蟲文件是基於CrawlSpider這個類的,而再也不是Spider這個基類。
- 深度爬取:
增量式爬蟲:
- 概念:用來《檢測》網站數據更新的狀況。只會爬取網站中更新出來的新數據。 - 核心:去重