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_redisscrapy_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...