爬蟲 二 關於單體爬蟲的設計問題

2021-09-24 12:32:50 字數 1012 閱讀 2676

本文的前提是:不考慮分布式及集群形式的爬蟲,從單體爬蟲入手,分析爬蟲的各組成部分及設計思路。

一.巨集觀分析

首先從巨集觀上理解,爬蟲主要的作用是在最短的時間內爬取最多的質量最高的網頁,為之後的索引階段提供最基本的資料來源。

通過乙個scheduler system(排程系統)分配需要爬取的url,而具體的crawler node(爬蟲節點)去做具體爬取的工作。

二.逐步分解

在面對乙個複雜問題時我們通常的做法將其分解為多個小問題進行各個擊破,如在演算法設計時經常使用的分治思想,同樣的在考慮單體爬蟲的設計問題時我們也可以借鑑此方式。

單體爬蟲各組成部分分析:

1.首先我們需要乙個存放待爬取url的佇列,習慣稱為todo queue。

這部分需要針對我們的target data source-需要爬取的網頁數量決定採用何種資料結構或儲存技術,是採用記憶體資料結構如鍊表、優先順序佇列,還是採用記憶體資料庫如berkeleydb,還是採用relationdb(關係型資料庫)?該部分將在後一篇博文中討論。

2.其次我們需要乙個存放已爬取url的集合,習慣稱為visited set。

該部分在整個爬行過程中訪問率很高,還需要考慮訪問速度、空間占用等問題,將在之後進行討論。

4.第四我們需要乙個網頁解析服務,來從網頁**中提取url。

該部分本應該是爬蟲中最簡單的,但是存在乙個問題:動態網頁的url提取。

各大搜尋引擎提供商面對這個問題時都採取了另外一種策略-seo優化,在這裡我們只從純技術角度去討論如何對動態網頁進行url提取,之後進行討論。

於是我們有了下圖:

單體爬蟲的組成還是相當簡單的,之後我們討論爬蟲各部分的設計思路並寫一些小demo.

關於單體測試的事務操作問題

資料庫層 測試類 會產生以下問題 原因 使用單體測試,因為沒有經過業務層,所以會產生事務問題,這時候是系統預設的事務,無法做增刪改的操作 然後我新增了事務,執行操作也顯示成功了,可是資料庫的資料卻沒有改變 原因就是雖然操作執行成功了,但是事務在最後的時候回滾了,這表示你所做的操作相當於白做。這時候我...

黑板客爬蟲闖關第二關

這一關相比第一關反而更容易,因為不需要進行複雜的正則判斷,只需要用迴圈嘗試密碼即可。這裡需要用到requests的post請求,並在請求裡加上使用者名稱和密碼即可。coding utf 8 import requests wrongnotify 您輸入的密碼錯誤,請重新輸入 website inde...

黑板客爬蟲闖關第二關

檢視原始碼 post傳輸的內容名 username,password.根據題目要求,範圍在30之內,while 迴圈即可,沒必要雙迴圈 且passeord提示輸入的是數字,直接用i即可,不用 coding utf 8 import urllib2 import urllib import re i ...