15天學會爬蟲 第十一天

2021-09-30 17:22:11 字數 2895 閱讀 5000

start_urls誰構造的請求?

def

start_requests

(self)

:for url in self.start_urls:

yield request(url, dont_filter=

true

)

當爬蟲開始執行時,首先引擎會呼叫爬蟲類的start_requests()方法將start_urls列表中的所有url構造成請求物件,放入請求佇列

start_requests()方法yield的請求,不經過爬蟲中介軟體,不過濾網域名稱是否超出allowed_domains

是不是所有的請求,放入排程器之前,都會經過爬蟲中介軟體?

start_urls構造的請求不經過

攜帶cookie

def

start_requests

(self)

:for url in self.start_urls:

yield request(url, dont_filter=

true

,cookies=cookie_dict)

傳送post請求

yield scrapy.formrequest(

url=

"", formdata=formdata,

callback=self.parse_login

)

form表單請求

formdata =

# 傳送請求

yield scrapy.formrequest.from_response(

response,

formdata=formdata,

callback=self.parse_login

)

pip install scrapy_redis

scrapy_reids 只是scrapy的乙個元件

增量式爬蟲 ,請求持久化,下次接著爬取

分布式爬蟲 ,reids共享

實現增量式爬蟲

在settings.py中新增如下**

# 指定了去重的類

dupefilter_class =

"scrapy_redis.dupefilter.rfpdupefilter"

# 指定了排程器的類

scheduler =

"scrapy_redis.scheduler.scheduler"

# 排程器的內容是否持久化

scheduler_persist =

true

# redis的url

redis_url =

"redis:"

# 如果資料需要儲存到redis中,選配的

item_pipelines =

生成指紋

rfpdupefilter.py

def

request_seen

(self, request)

:"""

生成請求指紋,並判斷請求在不在指紋集合中

如果返回true,表示已經放入請求佇列中了

返回false,表示該請求還未做過

"""fp = self.request_fingerprint(request)

#生成指紋

# this returns the number of values added, zero if already exists.

# 嘗試將指紋放入指紋集合中,如果返回值為0,代表已經存在

added = self.server.sadd(self.key, fp)

return added ==

0

def

request_fingerprint

(request)

:"""

對請求生成指紋,利用hashlib的sha1物件,對request的url、method、body進行雜湊,會產生乙個40位16進製制的字串,作為request的指紋

"""fp = hashlib.sha1(

) fp.update(to_bytes(request.method)

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

fp.update(request.body or b''

)return fp.hexdigest(

)

進入佇列
def

enqueue_request

(self, request):if

not request.dont_filter and self.df.request_seen(request)

:return

false

self.queue.push(request)

return

true

如果請求設定的過濾並且請求的指紋在指紋集合中存在的,不進入佇列

其他情況會進入佇列

start_url中由於yield請求時,預設設定了dont_filter為true,不過濾,所以肯定會進入佇列

為啥設定start_urls為不過濾?

start_url是起始頁,其他請求需要靠start_url對應的響應才能保證抓取
如何對資料進行去重?

資料存入mongodb的時候,可以對關鍵字段建立復合索引,實現去重

可以對資料的關鍵字段進行雜湊對映,生成的指紋判斷是否存在與指紋集合中,如果存在,說明資料重複

布隆過濾器,實現大資料量的去重

15天前端學習 第十一天(個人記錄)

背景圖的尺寸問題 background size 寬 高 功能 可以設定背景圖大小,但可能會影響到的質量 一般不用 background size cover 覆蓋 功能 將等比例放大鋪滿容器,可能會溢位,溢位部分會被隱藏。background size contain 包含 功能 將等比例放大,當...

UnixC第十一天

回憶昨天內容 一 訊號阻塞 sigprocmask 2 sigset t 訊號阻塞和訊號忽略的區別 可靠訊號 不可靠 訊號丟失 二 獲取程序的未決訊號集 從未決訊號集中找未決訊號 sigpending 2 什麼是未決訊號?三 訊號從產生到處理的整個過程 四 system v ipc 訊息佇列 獲取乙...

第十一天作業

第一題 import time import random deffoo print 開始執行。time.sleep random.uniform 1,3 print 執行完畢 return 都結束了 print foo 第二題 import time import random deffoo pr...