1. 程式人生 > >requests 庫的另類用法(stream)

requests 庫的另類用法(stream)

起因: 同事讓我幫他抓取一批URL,並獲取對應URL的標籤中的文字,忽略對應URL網站的封禁問題,這個任務並不是一個特別麻煩的事情。然後實際跑起來,卻發現流量打的很高,超過10Mb/s。

經過排查發現,是因為很多URL,實際是下載連結,會觸發檔案下載,這些URL對應的html中根本不會包含標籤,那麼處理邏輯就很清晰了,先拿到headers,取出Content-Type,判斷是否是
text/html,如果不是,則該Response的body體,就沒有必要讀取了。

查詢requests的相應資料

By default, when you make a request, the body of the response is
downloaded immediately. You can override this behaviour and defer
downloading the response body until you access the Response.content
attribute with the stream parameter:

tarball_url = 'https://github.com/kennethreitz/requests/tarball/master'
r = requests.get(tarball_url, stream=True)

At this point only the response headers have been downloaded and the
connection remains open, hence allowing us to make content retrieval
conditional:

if int(r.headers['content-length'
]) < TOO_LONG: content = r.content ...

只有headers頭被下載了,body中的資料還沒有被下載,這樣就能避免不必要的流量開銷,只有當你使用r.content 的時候,所有body內容才會被下載

You can further control the workflow by use of the
Response.iter_content() and Response.iter_lines() methods.
Alternatively, you can read the undecoded body from the underlying
urllib3 urllib3.HTTPResponse at Response.raw.

實時上還可以使用Response.iter_content() Response.iter_lines()
Response.raw()來自己決定要讀取多少資料

相關推薦

requests 用法stream

起因: 同事讓我幫他抓取一批URL,並獲取對應URL的標籤中的文字,忽略對應URL網站的封禁問題,這個任務並不是一個特別麻煩的事情。然後實際跑起來,卻發現流量打的很高,超過10Mb/s。 經過排查發現,是因為很多URL,實際是下載連結,會觸發檔案下載,這些

特性property/靜態方法staticmethod/方法classmethod/__str__的用法

-s bject 方法 結構 stat static 位置 代碼 類定義 property是一種特殊的屬性,訪問它時會執行一段功能(函數)然後返回值 1 import math 2 class Circle: 3 def __init__(self,radi

Requests函式的學習玩轉python網路爬蟲

一、請求方式 HTTP常用的請求方式是GET和POST,Requests對此區分兩種不同的請求方式。 (1)GET請求 Requests的GET請求分為兩種:不帶引數和帶引數。判斷URL是否帶有引數,通過對“?”進行判斷,“?”表示帶有引數。 import requests # 第一

6-4 堆疊 15 分

在棧的順序儲存實現中,另有一種方法是將Top定義為棧頂的上一個位置。請編寫程式實現這種定義下堆疊的入棧、出棧操作。如何判斷堆疊為空或者滿? 函式介面定義: bool Push( Stack S, ElementType X ); ElementType Pop( Stack S );

堆疊 20 分

6-3 另類堆疊 (20 分) 在棧的順序儲存實現中,另有一種方法是將Top定義為棧頂的上一個位置。請編寫程式實現這種定義下堆疊的入棧、出棧操作。如何判斷堆疊為空或者滿? 函式介面定義: bool Push( Stack S, ElementType X ); Elemen

python基礎----特性property、靜態方法staticmethod方法classmethod、__str__的用法

、特性(property)                                                                          1 什麼是特性property property是一種特殊的屬性,訪問它時會執行一段功能(函式

java基礎學習 java.sql7使用資料庫連線池來管理資料庫連線物件

前言: 在實際開發中,如果我們不斷地建立資料庫連線物件,一個數據庫連線物件均對應一個物理資料庫連線,每次操作都開啟一個物理連線,使用完後就立即關閉連線,頻繁的開啟關閉連線會造成系統性能下降 因此實際開發中不推薦頻繁的建立資料庫連線物件,頻繁的開啟物理資料庫連線,頻繁的關閉

Python之requests的基本使用填坑

前言 在使用了urllib庫之後,感覺很麻煩,比如獲取個cookie都需要分幾步,程式碼又多,又繁,那有沒有更加容易點的請求庫呢?答案是有的,那就是第三方庫requests,這個庫的作者是大名鼎鼎的kennethreitz,創作這個庫的原因就是想讓python

sqlyog中,將一個數據中的表資料複製到一個數據

第一步:右鍵源資料庫名,單擊“將資料庫複製到不同的主機/資料庫”,檢視圖一,圖二。                                                                                  (圖一)           

requests的高階用法1

1.會話物件 1)會話物件能夠跨請求保持某些引數,會在同一個session例項發出的所有請求之間保持cookie;(Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案;session是儲存在伺服器上的資訊。) >

Qt中QStackedLayout用法選單葉切換介面

本文主要總結用QStackedLayout類的用法,主要通過新建一個例項,體現QStackedLaout類可以應用在切換選單上。QStackedLaout類是屬於佈局管理器中的一個常用類。下面是一個例項,該例項是頂部兩個選單按鈕,分別點選兩個按鈕,將會切換不同頁面。比如點選p

Java中動態陣列ArrayList用法

1、什麼是ArrayList ArrayList就是傳說中的動態陣列,用MSDN中的說法,就是Array的複雜版本,它提供瞭如下一些好處: 動態的增加和減少元素 實現了ICollection和IList介面 靈活的設定陣列的大小 2、如何使用

跨域讀取Cookie和session之HttpWebRequest方法網站API開發

在網上找了很多跨域讀取Cookie的方法,但都是A域主動設定B域的Cookie,而沒有B域去獲取A域Cookie的方法。 若要轉載,請註名出處 http://blog.csdn.net/try530/archive/2009/01/06/3721525.aspx所謂A域

Java NIOSelector機制解析

在使用Java進行相關網路程式的的設計時,出身C/C++的人,首先想到的框架就是多路複用,想到多路複用,Unix/Linux下馬上就能讓從想到select, poll, epoll系統呼叫。於是,在看到Java的NIO中的Selector類時必然會倍感親切。稍加查閱一下SDK手冊以及相關例程,不一會兒,一個多

Linux gmp的簡單使用

GMP常用函式介紹(這裡只簡單介紹一下整數函式,如需更多請自行閱讀手冊) 1.初始化函式 mpz_t integ;// 定義 mpz_init (integ)// 初始化,預設值為0 2.賦值函式

DS控件 DS標簽的用法之折疊展開

bitmap tex handle 一個 請求 安裝 展開 and sub 某些場合下,可以通過動態設置DS標簽的文本內容來輸出不同的顯示效果,以下是示例。 示例中的素材 示例資源文本 String1="<linkimg=E1>&

vue3.0 載入json的“”方法非ajax

# 問題 > 載入json一定要用ajax的方式嗎? 最近學習vue3.0,在實現一個功能的時候發現一個問題—— 寫程式碼的時候,需要的json太長、太多,和程式碼放在一起太混亂。看程式碼總有翻來翻去,又沒有“摺疊”功能。 那麼能不能把json放在一個單獨的檔案裡面儲存,然後在載入進來呢? 查了半天的資料

Mysql數據性能優化

效率 dir sort variables 緩存 模型 mysql5.6 包含 dpt 參考 http://www.jb51.net/article/82254.htm 今天,數據庫的操作越來越成為整個應用的性能瓶頸了,這點對於Web應用尤其明顯。關於數據庫的性能,這並不只

爬蟲之BeautifulSoup學習

不必要 baidu html left 官方 blank 正則 文本處理 比較 BeautifulSoup官方介紹文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 四大對象種

爬蟲之BeautifulSoup學習

子節點 rom lac repr 文檔 strong 爬蟲 time contents 遍歷文檔樹:   1、查找子節點   .contents     tag的.content屬性可以將tag的子節點以列表的方式輸出。   print soup.body.cont