scrapy中request的指紋生成

2021-08-19 18:41:17 字數 933 閱讀 8742

if include_headers:

include_headers = tuple(to_bytes(h.lower())

for h in sorted(include_headers))

cache = _fingerprint_cache.setdefault(request, {})

if include_headers not in cache:

fp = hashlib.sha1()

fp.update(to_bytes(request.method))

fp.update(to_bytes(canonicalize_url(request.url)))

fp.update(request.body or b'')

if include_headers:

for hdr in include_headers:

if hdr in request.headers:

fp.update(hdr)

for v in request.headers.getlist(hdr):

fp.update(v)

cache[include_headers] = fp.hexdigest()

return cache[include_headers]

第一步:在呼叫該函式的時候,只傳來乙個request, 建立乙個字典的弱引用

第二步:運用sha1加密, 將請求方法(get, post) 轉為為位元組,再呼叫update方法,

第四步:將請求引數位元組話,最後進行加密。

經過這四步就生成了該request的指紋

因為include_headers是預設的,所以如果你在判斷是不是重複的request的時候,需要用到部分headers中的東西,你可以定義乙個include_headers。以達到更好的判重的目的。

Scrapy中的Request和日誌分析

自動去重,根據url的雜湊值,進行去重 屬性meta dict 在不同的請求之間傳遞資料,dict priority int 此請求的優先順序 預設為0 dont filter boolean 關閉自動去重 errback callable 在處理請求時引發任何異常時將呼叫的函式 flags lis...

scrapy在Request之間傳遞引數

我們在寫爬蟲的時候,經常會遇到這種情況,這裡舉例說明一下,比如爬乙個新聞頁面,首先爬的是新聞列表頁pagea,從pagea裡獲取新聞詳細頁連線,然後爬新聞詳情頁pageb,新聞詳情頁pageb裡有乙個關於這個新聞的解說,在另乙個頁面pagec。這時候如果用傳參的方法可以直接在爬取完成一條新聞的整個資...

JSP中的request物件

jsp中的request物件 佟強 2008.10.9 request物件實現了httpservletrequest介面,通過它可以獲得使用者的請求引數,獲得cookie,獲得http請求頭,獲得使用者的ip位址等等。request物件的主要方法有 getparameter string name ...