使用場景:1) 爬蟲設定ip**池時驗證ip是否有效 2)進行壓測時,進行批量請求等等場景
grequests 利用 requests和gevent庫,做了乙個簡單封裝,使用起來非常方便。
另外,由於grequests底層使用的是requests,因此它支援
get,options, head, post, put, delete 等各種http method
所以以下的任務請求都是支援的
grequests.post(url, json=)
grequests.delete(url)
**如下:
)實際操作中,也可以自定義返回的結果
修改grequests原始碼檔案:
例如:新增extract_item() 函式合修改map()函式
def
extract_item
(request)
:"""
提取request的內容
:param request:
:return:
"""item =
dict()
item[
"url"
]= request.url
item[
"text"
]= request.response.text or
"" item[
"status_code"
]= request.response.status_code or
0return item
defmap
(requests, stream=
false
, size=
none
, exception_handler=
none
, gtimeout=
none):
"""concurrently converts a list of requests to responses.
:param requests: a collection of request objects.
:param stream: if true, the content will not be downloaded immediately.
:param size: specifies the number of requests to make at a time. if none, no throttling occurs.
:param exception_handler: callback function, called when exception occured. params: request, exception
:param gtimeout: gevent joinall timeout in seconds. (note: unrelated to requests timeout)
"""requests =
list
(requests)
pool = pool(size)
if size else
none
jobs =
[send(r, pool, stream=stream)
for r in requests]
gevent.joinall(jobs, timeout=gtimeout)
ret =
for request in requests:
if request.response is
notnone:)
elif exception_handler and
hasattr
(request,
'exception'):
)else
:none
)yield ret
可以直接呼叫:
import grequests
urls =
['',''
,'',''
,'',''
]rs =
(grequests.get(u)
for u in urls)
response_list = grequests.
map(rs, gtimeout=10)
for response in
next
(response_list)
:print
(response)
支援事件鉤子
grequests模組的使用
使用場景 1 爬蟲設定ip 池時驗證ip是否有效 2 進行壓測時,進行批量請求等等場景 grequests 利用 requests和gevent庫,做了乙個簡單封裝,使用起來非常方便。get,options,head,post,put,delete 等各種http method 所以以下的任務請求都...
Python使用grequests併發傳送請求
參考博文 requests是python傳送介面請求非常好用的乙個三方庫,由k神編寫,簡單,方便上手快。但是requests傳送請求是序列的,即阻塞的。傳送完一條請求才能傳送另一條請求。為了提公升測試效率,一般我們需要並行傳送請求。這裡可以使用多執行緒,或者協程,gevent或者aiohttp,然而...
模組的使用
一 什麼是模組?模組是一系列功能的集合體。模組的分類 自定義模組 第三方模組 內建模組 c語言寫的一些功能 常見的模組形式 1 乙個module.py檔案就是乙個模組,檔名是module.py,而模組名是module。2 乙個包含有 init py檔案的資料夾也是模組。3 已被編譯為共享庫或dll或...