freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文正稿-資料下載頁

2025-06-28 21:18本頁面
  

【正文】 .. ..UrlQueueManager urlQueueManager, int biaoji) {// 站內(nèi)URL隊(duì)列ListString siteInsideUrls = new ArrayListString()。String url = 。// HTML中是否還含有href標(biāo)簽boolean haveHref = (href)。while (haveHref) {html_text = ((href=) + 5)。// 當(dāng) href= 后以 開頭的情況if (39。\39。 == (0)) {html_text = (1)。url = (0, (\))。url = addURLhost(fromURL, url)。if (isSiteInsideUrl(url, urlQueueManager)) {if (!(url)) {(url)。}}haveHref = (href)。}(siteInsideUrls)。}在每個(gè) URL 被截取出來之后,需要判斷這些 URL 是相對地址,還是絕對地址。a href=../mlist/ target=_self 動作片/aa href= 例如上面的 HTML 代碼,如果截取出來的 URL 為../mlist/ 這種形式,即為相對地址。我們需要將其轉(zhuǎn)化為絕對地址。假如這個(gè)相對地址的父URL 為 概念,../為返回上一層,所以可以得到這個(gè)相對地址的絕對地址為 2 種 URL,它包含完整的協(xié)議信息,域名地址??梢耘袛嗨鼮榻^對地址。當(dāng)?shù)玫竭@些完整的 URL 地址以后,我們需要對其進(jìn)行過濾。很多 URL 它們指向的文件不是 HTML 文件,而是一些 CSS 文件,或者 RAR 包文件,或者只是接.. .. .. ..續(xù)“”符號,代表只是調(diào)用一段 javascript 代碼。像這種情況我們就直接拋棄這些 URLs。下面是一段實(shí)行代碼。代碼通過檢索 URL 字符串中是否包含.css,.rar,.zip這些后綴來進(jìn)行判斷。// 如果url中包含以下 字符串,則不加入隊(duì)列if (().contains(.css)|| ().contains(.rar) || ()|| (.zip) || (javascript)) {return false。}過濾完后的 URLs,再判斷它為站內(nèi) URL 或者為站外 URL。一般情況下同一網(wǎng)站內(nèi)的 URL 的 host 名因該是一致的。所以我們可以通過判斷 URLs 中是否包含站點(diǎn) host 就可以了。下面的代碼是 host 的情況。其他情況的代碼可以類推。// if ((.)) {String str = (0,(.))。if ((((39。.39。)) + .)) {return true。}}如果為站內(nèi)URL則加入到緩存隊(duì)列。 URL 隊(duì)列管理 URL 消重處理URL 消重處理,我是用 LRU 算法加上 MD5 壓縮算法來實(shí)現(xiàn)的。因?yàn)?URLs 的數(shù)量非常巨大,為了節(jié)省內(nèi)存空間。我先通過 MD5 壓縮來得到每個(gè) URL 對于的一個(gè) hash 碼。這個(gè) hash 碼的長度相對較小,可以節(jié)省內(nèi)存開銷。而且產(chǎn)生碰撞的幾率非常小,可以忽略不計(jì)。然后這個(gè) URL 消重隊(duì)列的維護(hù)是同時(shí) LRULinkedHashMap 來實(shí)現(xiàn)的。這個(gè)Map 非常好,它總是淘汰重復(fù)次數(shù)最少的 URL。這樣就算 URL 數(shù)過大,也可以盡量避免重復(fù)下載 URL。它的具體構(gòu)造如下:.. .. .. ..public class LRULinkedHashMapK, V extends LinkedHashMapK, V {private static final long serialVersionUID = 1L。private final int maxCapacity。private static final float DEFAULT_LOAD_FACTOR = 。private final Lock lock = new ReentrantLock()。public LRULinkedHashMap(int maxCapacity) {super(maxCapacity, DEFAULT_LOAD_FACTOR, true)。 = maxCapacity。}@Overrideprotected boolean removeEldestEntry(K, V eldest) {return size() maxCapacity。}@Overridepublic V get(Object key) {try {()。return (key)。} finally {()。}}@Overridepublic V put(K key, V value) {try {()。return (key, value)。} finally {()。}}}有了這個(gè) map 以后,我就會用 URL 到里面去碰撞。因?yàn)橛行┚W(wǎng)站的 URL 寫法不固定。也許是同一個(gè) URL,但是有些在最后一位接續(xù)/符號,而有些則沒有接續(xù)。這樣當(dāng)進(jìn)行 URL 去重處理時(shí),會認(rèn)為它們不是一個(gè) URL。所以我們必.. .. .. ..須先除去后面的/符號,再進(jìn)行 URL 去重判斷。public synchronized boolean isContainUrl(String url) {if ((/)) {url = (0, () 1)。}boolean b = ((url))。((url), true)。return b。} URL 等待隊(duì)列維護(hù)對 URL 等待隊(duì)列的操作主要有 2 個(gè):從里面取出 URLs。往里面加入 URLs。但是因?yàn)?URL 等待隊(duì)列會非常巨大,所以我將 URL 等待隊(duì)列設(shè)計(jì)成 3 段式。2 段基于內(nèi)存的 URL 緩存區(qū),和一個(gè)基于數(shù)據(jù)庫的儲存區(qū)。所以這里就會有 2 個(gè)方法來完成數(shù)據(jù)直接的交接。當(dāng)加入 URL 緩存太長時(shí),調(diào)用下面的方法,將緩存區(qū)的內(nèi)容加入到數(shù)據(jù)庫。具體的實(shí)現(xiàn)方法是,當(dāng)存入緩存超過一定數(shù)目的時(shí)候。調(diào)用 waitQueueDecrease()這個(gè)函數(shù),將存入緩存里的數(shù)據(jù)轉(zhuǎn)移到數(shù)據(jù)庫。方法是取出下標(biāo)為 0 的元素,將其加入到數(shù)據(jù)庫,然后刪除下標(biāo)為 0 的元素。不斷重復(fù)這個(gè)操作,直到存入緩存被清空。下面是具體實(shí)現(xiàn)的 JAVA 代碼。public synchronized void waitQueueDecrease() {try {Statement stmt = null。while (() 0) {try {stmt = ().createStatement()。while ((0).size() 0) {String url = (String)(0).get(0)。(0).remove(0)。(insert into middlequeue (url) values(39。+ url + 39。)。)。(insert into databasequeue (url) values(39。+ url + 39。)。)。}.. .. .. ..當(dāng)取出緩存區(qū)空以后,需要將數(shù)據(jù)庫的內(nèi)容加入到緩存區(qū)。通過調(diào)用waitQueueAdd()這個(gè)函數(shù)來實(shí)現(xiàn)。具體的實(shí)現(xiàn)方法是:從數(shù)據(jù)庫里搜索前 25 條數(shù)據(jù),因?yàn)閿?shù)據(jù)庫添加數(shù)據(jù)時(shí)是順序往下壓入的。對于 MYSQL 數(shù)據(jù)庫,可以使用 LIMIT 這個(gè)關(guān)鍵字。檢索存入數(shù)據(jù)庫最上端的 25 條數(shù)據(jù),然后依次將其加入到取出緩存區(qū)。然后刪除數(shù)據(jù)庫中這 25 條數(shù)據(jù)。下面是具體實(shí)現(xiàn)的 JAVA 代碼:public synchronized void waitQueueAdd() {String sql = SELECT * FROM middlequeue LIMIT 25。Statement stmt = null。ResultSet res = null。try {stmt = ().createStatement()。res = (sql)。while (()) {((url))。}(delete from middlequeue limit 25)。 數(shù)據(jù)庫設(shè)計(jì)對于 MYSQL 數(shù)據(jù)庫的設(shè)計(jì)。我建立了 2 個(gè)表,分別為 middlequeue 和databasequeue。middlequeue 表和 databasequeue 表都只有一個(gè)字段 URL,同時(shí)它作為主鍵,因?yàn)榇嫒氲?URL 不可能重復(fù)。Middlequeue 用于 URL 等待隊(duì)列的主存儲部分。而 databasequeue 表記錄爬蟲程序運(yùn)行得到的所有 URLs。JAVA 程序和數(shù)據(jù)之間的通信是通過 JDBC 實(shí)現(xiàn)的。下面是 JAVA 程序連接MYSQL 數(shù)據(jù)庫的代碼。public static Connection conn() {Connection conn = null。try {// 加載Connector/J驅(qū)動().newInstance()。// 建立到MySQL的連接conn = (jdbc: root, root)。} catch (Exception ex) {.. .. .. ..(Error : + ())。}return conn。}.. .. .. ..第六章 系統(tǒng)測試我以 URL。然后用爬蟲程序去運(yùn)行。5 分鐘內(nèi)總共爬行出了 2201 個(gè) URL。下面是從數(shù)據(jù)庫里截圖的 2 段爬行結(jié)果。圖 部分運(yùn)行結(jié)果圖 為最先爬蟲出來的 URLs 結(jié)果。我分析 HTML 代碼。最先檢索出來 href 如下:.. .. .. ..這是一個(gè)相對地址,對應(yīng)圖 的爬蟲結(jié)果。程序?qū)⑵滢D(zhuǎn)化為了,絕對地址。但分析這個(gè) URL 可以得知。這個(gè) URL 為 ico 文件,是不可能被當(dāng)作 HTML 解析的。所以這種 URL 因該過濾掉。這是程序設(shè)計(jì)上的不足。然后被檢索出來的 href 標(biāo)簽是:這是一段完整 URL,但是其 host 名同初始 URL 不一致,同時(shí)它的后綴為css,表明它指向的文件為 css 文件。所以因該被過濾掉。對應(yīng)圖 的爬蟲結(jié)果,可以看到這段 URL 的確被過濾了。第三個(gè)被檢索到的 href 標(biāo)簽為:這是一段很標(biāo)準(zhǔn)的 URL,它的 host 為 并且可以得到 HTML 代碼。所以這個(gè) URL 被加入 URL 隊(duì)列。根據(jù)測試結(jié)果可以得知爬蟲程序能夠正確解析出頁面 URLs。.. .. .. ..我在 SpiderWorker 的 run 方法寫入這樣一段代碼:(線程+ biaoji+運(yùn)行)。圖 圖 為控制臺打印出來的信息。根據(jù)顯示結(jié)果可以看出,不同的線程的確是在交替完成爬行任務(wù)。.. .. .. ..第七章 結(jié)論從課題著手到現(xiàn)在論文完成,經(jīng)歷了 3 個(gè)月的時(shí)間。在這個(gè) 3 個(gè)月里,我不斷學(xué)習(xí),探索,從對網(wǎng)絡(luò)爬蟲一無所知,到能成功編寫出網(wǎng)絡(luò)爬蟲程序。對網(wǎng)絡(luò)爬蟲中比較主流的技術(shù)都有了更深的理解。網(wǎng)絡(luò)爬蟲是一個(gè)自動搜集互聯(lián)網(wǎng)信息的工具,實(shí)現(xiàn)了網(wǎng)絡(luò)爬蟲,就可以在互聯(lián)網(wǎng)這樣一個(gè)巨大的信息海洋里遨游。這篇論文實(shí)現(xiàn)了一個(gè)基于廣度優(yōu)先策略的多線程爬蟲程序,可以搜集站內(nèi)URLs。但是在功能細(xì)節(jié)上還有很多不足,比如系統(tǒng)不夠優(yōu)化,功能不夠強(qiáng)大,沒有解析網(wǎng)頁信息。對于網(wǎng)絡(luò)爬蟲這個(gè)龐大的知識體系來說,這篇論文實(shí)現(xiàn)的功能只能算一些皮毛。要深刻地理解爬蟲程序,在爬蟲程序設(shè)計(jì)中有所作為,還需要長達(dá)幾年,或者更長時(shí)間的積累。所以在以后的時(shí)間,我將繼續(xù)研究網(wǎng)絡(luò)爬蟲技術(shù)。分析設(shè)計(jì)一些比較復(fù)雜的爬行策略,優(yōu)化爬蟲程序。希望在這一課題上達(dá)到另一個(gè)高度。.. .. .. ..參考文獻(xiàn),簡析搜索引擎中網(wǎng)絡(luò)爬蟲的搜索策略[N],阜陽師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2022(09):P60~63.,基于 JAVA 的多線程 SPID
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1