python爬蟲---scrapy框架爬取圖片,scrapy手動發送請求,發送post請求,提高爬取效率,請求傳參(meta),五大核心組件,中間件

#  settings 配置 UA
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'

一丶scrapy的圖片數據爬取(流數據的爬取)

​ scrapy中封裝好了一個管道類(ImagesPipeline),基於該管道類能夠實現圖片資源的請求和持久化存儲python

編碼流程:

  • 爬蟲文件中解析出圖片的地址
  • 將圖片地址封裝到item中且提交給管道
  • 管道文件中自定義一個管道類(父類:ImagesPipeline)
  • 重寫三個方法:
    • def get_media_requests(self,item,info):
    • def file_path(self,request,response=None,info=None):
    • def item_completed(self,result,item,info):
  • 在配置文件中開啓管道且加上IMAGES_STORE = './imgLibs'

在scrapy中如何進行手動請求發送

​ yield scrapy.Request(url,callback)redis

在scrapy中如何進行post請求的發送?

​ yield scrapy.FormRequest(url,callback,formdata)cookie

如何對起始的url進行post請求的發送?

  • 重寫父類的start_requests(self):
    def start_requests(self):
    for url in self.start_urls:
    yield scrapy.FormRequest(url,callback=self.parse,formdata={})

在scrapy中如何提高爬取數據的效率?

增長併發:
    默認scrapy開啓的併發線程爲32個,能夠適當進行增長。在settings配置文件中修改CONCURRENT_REQUESTS = 100值爲100,併發設置成了爲100。

下降日誌級別:
    在運行scrapy時,會有大量日誌信息的輸出,爲了減小CPU的使用率。能夠設置log輸出信息爲INFO或者ERROR便可。在配置文件中編寫:LOG_LEVEL = ‘ERROR’

禁止cookie:
    若是不是真的須要cookie,則在scrapy爬取數據時能夠禁止cookie從而減小CPU的使用率,提高爬取效率。在配置文件中編寫:COOKIES_ENABLED = False

禁止重試:
    對失敗的HTTP進行從新請求(重試)會減慢爬取速度,所以能夠禁止重試。在配置文件中編寫:RETRY_ENABLED = False

減小下載超時:
    若是對一個很是慢的連接進行爬取,減小下載超時能夠能讓卡住的連接快速被放棄,從而提高效率。在配置文件中進行編寫:DOWNLOAD_TIMEOUT = 1 超時時間爲10s

請求傳參(深度爬取)

  • 深度爬取:
    • 爬取的數據沒有存在同一張頁面中。
  • 如何實現請求傳參
    • Request(url,callback,meta={}):能夠將meta字典傳遞給callback
    • callback接收item:response.meta

scrapy的五大核心組件

引擎(Scrapy)
  用來處理整個系統的數據流處理, 觸發事務(框架核心)
調度器(Scheduler)
  用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 能夠想像成一個URL(抓取網頁的網址或者說是連接)的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址
下載器(Downloader)
  用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是創建在twisted這個高效的異步模型上的)
爬蟲(Spiders)
  爬蟲是主要幹活的, 用於從特定的網頁中提取本身須要的信息, 即所謂的實體(Item)。用戶也能夠從中提取出連接,讓Scrapy繼續抓取下一個頁面
項目管道(Pipeline)
  負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證明體的有效性、清除不須要的信息。當頁面被爬蟲解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。

scrapy的中間件

  • 有哪些中間件。
    • 下載中間件(推薦)
    • 爬蟲中間件
  • 下載中間件的做用
    • 批量攔截全部的請求和響應
  • 爲何攔截請求
    • 篡改請求的頭信息(UA)
      • request.headers['User-Agent'] = 'xxxxx'
    • 代理
  • 爲何攔截響應
    • 篡改響應數據
    • 篡改響應對象(推薦)

項目:

網易新聞(國內,國際,軍事,航空,無人機)新聞數據的標題和內容

  • 分析:
    • 1.每個板塊下對應的新聞數據都是動態加載出來的
    • 2.會對五個板塊的響應數據進行數據解析,可是板塊對應的響應對象是不包含動態加載的新聞數據,目前
      獲取的每個板塊對應的響應對象是不知足需求的響應對象!!!
    • 3.將不知足需求的5個響應對象(工程中一共會有1+5+n),修改爲知足需求。
      • 找到指定的5個不知足需求的響應對象(中間件)
  • 你的redis若是不能夠寫入字典
    • pip install -U redis==2.10.6
相關文章
相關標籤/搜索