在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)頁爬蟲及其用到的算法和數(shù)據(jù)結(jié)構(gòu)

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:快課網(wǎng) ? 作者:Jay13 ? 2022-12-02 11:30 ? 次閱讀

網(wǎng)絡(luò)爬蟲,是一種按照一定的規(guī)則,自動的抓取萬維網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)爬蟲是搜索引擎系統(tǒng)中十分重要的組成部分,它負(fù)責(zé)從互 聯(lián)網(wǎng)中搜集網(wǎng)頁,采集信息,這些網(wǎng)頁信息用于建立索引從而為搜索 引擎提供支持,它決定著整個引擎系統(tǒng)的內(nèi)容是否豐富,信息是否即 時,因此其性能的優(yōu)劣直接影響著搜索引擎的效果。

網(wǎng)絡(luò)爬蟲程序的優(yōu)劣,很大程度上反映了一個搜索引擎的好差。不信,你可以隨便拿一個網(wǎng)站去查詢一下各家搜索對它的網(wǎng)頁收錄情況,爬蟲強大程度跟搜索引擎好壞基本成正比。

1.世界上最簡單的爬蟲——三行情詩

我們先來看一個最簡單的最簡單的爬蟲,用python寫成,只需要三行。

import requests
url="http://www.cricode.com"
r=requests.get(url)

上面這三行爬蟲程序,就如下面這三行情詩一般,很干脆利落。

是好男人,

就應(yīng)該在和女友吵架時,

抱著必輸?shù)男膽B(tài)。

2.一個正常的爬蟲程序

上面那個最簡單的爬蟲,是一個不完整的殘疾的爬蟲。因為爬蟲程序通常需要做的事情如下

1)給定的種子URLs,爬蟲程序?qū)⑺蟹N子URL頁面爬取下來

2)爬蟲程序解析爬取到的URL頁面中的鏈接,將這些鏈接放入待爬取URL集合中

3)重復(fù)1、2步,直到達(dá)到指定條件才結(jié)束爬取

因此,一個完整的爬蟲大概是這樣子的:

import requests                       #用來爬取網(wǎng)頁
from bs4 import BeautifulSoup         #用來解析網(wǎng)頁
seds = ["http://www.hao123.com",      #我們的種子
              "http://www.csdn.net",
              "http://www.cricode.com"]
sum = 0                               #我們設(shè)定終止條件為:爬取到100000個頁面時,就不玩了
 
while sum < 10000 :
    if sum < len(seds):
         r = requests.get(seds[sum])
         sum = sum + 1
         do_save_action(r)
         soup = BeautifulSoup(r.content)               
         urls = soup.find_all("href",.....)                     //解析網(wǎng)頁
         for url in urls:
              seds.append(url)
 
    else:
         break

3.現(xiàn)在來找茬

上面那個完整的爬蟲,不足20行代碼,相信你能找出20個茬來。因為它的缺點實在是太多。下面一一列舉它的N宗罪:

1)我們的任務(wù)是爬取1萬個網(wǎng)頁,按上面這個程序,一個人在默默的爬取,假設(shè)爬起一個網(wǎng)頁3秒鐘,那么,爬一萬個網(wǎng)頁需要3萬秒鐘。MGD,我們應(yīng)當(dāng)考慮開啟多個線程(池)去一起爬取,或者用分布式架構(gòu)去并發(fā)的爬取網(wǎng)頁。

2)種子URL和后續(xù)解析到的URL都放在一個列表里,我們應(yīng)該設(shè)計一個更合理的數(shù)據(jù)結(jié)構(gòu)來存放這些待爬取的URL才是,比如隊列或者優(yōu)先隊列。

3)對各個網(wǎng)站的url,我們一視同仁,事實上,我們應(yīng)當(dāng)區(qū)別對待。大站好站優(yōu)先原則應(yīng)當(dāng)予以考慮。

4)每次發(fā)起請求,我們都是根據(jù)url發(fā)起請求,而這個過程中會牽涉到DNS解析,將url轉(zhuǎn)換成ip地址。一個網(wǎng)站通常由成千上萬的URL,因此,我們可以考慮將這些網(wǎng)站域名的IP地址進行緩存,避免每次都發(fā)起DNS請求,費時費力。

5)解析到網(wǎng)頁中的urls后,我們沒有做任何去重處理,全部放入待爬取的列表中。事實上,可能有很多鏈接是重復(fù)的,我們做了很多重復(fù)勞動。

6)…..

4.找了這么多茬后,很有成就感,真正的問題來了,學(xué)挖掘機到底哪家強?

現(xiàn)在我們就來一一討論上面找茬找出的若干問題的解決方案。

1)并行爬起問題

我們可以有多重方法去實現(xiàn)并行。

多線程或者線程池方式,一個爬蟲程序內(nèi)部開啟多個線程。同一臺機器開啟多個爬蟲程序,如此,我們就有N多爬取線程在同時工作。能大大減少時間。

此外,當(dāng)我們要爬取的任務(wù)特別多時,一臺機器、一個網(wǎng)點肯定是不夠的,我們必須考慮分布式爬蟲。常見的分布式架構(gòu)有:主從(Master——Slave)架構(gòu)、點對點(Peer to Peer)架構(gòu),混合架構(gòu)等。

說道分布式架構(gòu),那我們需要考慮的問題就有很多,我們需要分派任務(wù),各個爬蟲之間需要通信合作,共同完成任務(wù),不要重復(fù)爬取相同的網(wǎng)頁。分派任務(wù)我們要做到公平公正,就需要考慮如何進行負(fù)載均衡。負(fù)載均衡,我們第一個想到的就是Hash,比如根據(jù)網(wǎng)站域名進行hash。

負(fù)載均衡分派完任務(wù)之后,千萬不要以為萬事大吉了,萬一哪臺機器掛了呢?原先指派給掛掉的哪臺機器的任務(wù)指派給誰?又或者哪天要增加幾臺機器,任務(wù)有該如何進行重新分配呢?

一個比較好的解決方案是用一致性Hash算法

2)待爬取網(wǎng)頁隊列

如何對待待抓取隊列,跟操作系統(tǒng)如何調(diào)度進程是類似的場景。

不同網(wǎng)站,重要程度不同,因此,可以設(shè)計一個優(yōu)先級隊列來存放待爬起的網(wǎng)頁鏈接。如此一來,每次抓取時,我們都優(yōu)先爬取重要的網(wǎng)頁。

當(dāng)然,你也可以效仿操作系統(tǒng)的進程調(diào)度策略之多級反饋隊列調(diào)度算法。

3)DNS緩存

為了避免每次都發(fā)起DNS查詢,我們可以將DNS進行緩存。DNS緩存當(dāng)然是設(shè)計一個hash表來存儲已有的域名及其IP。

4)網(wǎng)頁去重

說到網(wǎng)頁去重,第一個想到的是垃圾郵件過濾。垃圾郵件過濾一個經(jīng)典的解決方案是Bloom Filter(布隆過濾器)。布隆過濾器原理簡單來說就是:建立一個大的位數(shù)組,然后用多個Hash函數(shù)對同一個url進行hash得到多個數(shù)字,然后將位數(shù)組中這些數(shù)字對應(yīng)的位置為1。下次再來一個url時,同樣是用多個Hash函數(shù)進行hash,得到多個數(shù)字,我們只需要判斷位數(shù)組中這些數(shù)字對應(yīng)的為是全為1,如果全為1,那么說明這個url已經(jīng)出現(xiàn)過。如此,便完成了url去重的問題。當(dāng)然,這種方法會有誤差,只要誤差在我們的容忍范圍之類,比如1萬個網(wǎng)頁,我只爬取到了9999個,剩下那一個網(wǎng)頁,who cares!

5)數(shù)據(jù)存儲的問題

數(shù)據(jù)存儲同樣是個很有技術(shù)含量的問題。用關(guān)系數(shù)據(jù)庫存取還是用NoSQL,抑或是自己設(shè)計特定的文件格式進行存儲,都大有文章可做。

6)進程間通信

分布式爬蟲,就必然離不開進程間的通信。我們可以以規(guī)定的數(shù)據(jù)格式進行數(shù)據(jù)交互,完成進程間通信。

7)……

廢話說了那么多,真正的問題來了,問題不是學(xué)挖掘機到底哪家強?而是如何實現(xiàn)上面這些東西!:)

實現(xiàn)的過程中,你會發(fā)現(xiàn),我們要考慮的問題遠(yuǎn)遠(yuǎn)不止上面這些。紙上得來終覺淺,覺知此事要躬行!

審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4673

    瀏覽量

    94189
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40467
  • 爬蟲
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    7238

原文標(biāo)題:網(wǎng)頁爬蟲及其用到的算法和數(shù)據(jù)結(jié)構(gòu)

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    爬蟲數(shù)據(jù)獲取實戰(zhàn)指南:從入門到高效采集

    爬蟲數(shù)據(jù)獲取實戰(zhàn)指南:從入門到高效采集 ? ? 在數(shù)字化浪潮中,數(shù)據(jù)已成為驅(qū)動商業(yè)增長的核心引擎。無論是市場趨勢洞察、競品動態(tài)追蹤,還是用戶行為分析,爬蟲技術(shù)都能助你快速捕獲目標(biāo)信息。
    的頭像 發(fā)表于 03-24 14:08 ?274次閱讀

    IP地址數(shù)據(jù)信息和爬蟲攔截的關(guān)聯(lián)

    IP地址數(shù)據(jù)信息和爬蟲攔截的關(guān)聯(lián)主要涉及到兩方面的內(nèi)容,也就是數(shù)據(jù)信息和爬蟲。IP 地址數(shù)據(jù)信息的內(nèi)容豐富,包括所屬地域、所屬網(wǎng)絡(luò)運營商、訪
    的頭像 發(fā)表于 12-23 10:13 ?238次閱讀

    DDC264配置寄存器數(shù)據(jù)寫入和320 DCLK時鐘脈沖后的回讀數(shù)據(jù)結(jié)構(gòu)是什么?

    配置寄存器數(shù)據(jù)寫入和320 DCLK時鐘脈沖后的回讀數(shù)據(jù)結(jié)構(gòu)是什么? 根據(jù)注和表9,16位配置寄存器數(shù)據(jù),4位修訂ID, 300位校驗?zāi)J剑趺纯赡苡?024 TOTAL READBACK BITS, format = 0
    發(fā)表于 11-19 07:58

    視覺軟件HALCON的數(shù)據(jù)結(jié)構(gòu)

    在研究機器視覺算法之前,我們需要先了解機器視覺應(yīng)用中涉及的基本數(shù)據(jù)結(jié)構(gòu)。Halcon數(shù)據(jù)結(jié)構(gòu)主要有圖像參數(shù)和控制參數(shù)兩類參數(shù)。圖像參數(shù)包括:image、region、XLD,控制參數(shù)包括:string、integer、real、
    的頭像 發(fā)表于 11-14 10:20 ?898次閱讀
    視覺軟件HALCON的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>

    海外爬蟲IP的合法邊界:合規(guī)性探討與實踐

    海外爬蟲IP的合法邊界主要涉及合規(guī)性探討與實踐。
    的頭像 發(fā)表于 10-12 07:56 ?436次閱讀

    如何利用海外爬蟲IP進行數(shù)據(jù)抓取

    利用海外爬蟲IP進行數(shù)據(jù)抓取需要綜合考慮多個方面。
    的頭像 發(fā)表于 10-12 07:54 ?448次閱讀

    詳細(xì)解讀爬蟲多開代理IP的用途,以及如何配置!

    爬蟲多開代理IP是一種在爬蟲開發(fā)中常用的技術(shù)策略,主要用于提高數(shù)據(jù)采集效率、避免IP被封禁以及獲取地域特定的數(shù)據(jù)
    的頭像 發(fā)表于 09-14 07:55 ?643次閱讀

    AN-1926:M-LVDS簡介及其時鐘和數(shù)據(jù)分配應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《AN-1926:M-LVDS簡介及其時鐘和數(shù)據(jù)分配應(yīng)用.pdf》資料免費下載
    發(fā)表于 09-04 09:36 ?0次下載
    AN-1926:M-LVDS簡介<b class='flag-5'>及其</b>時鐘<b class='flag-5'>和數(shù)據(jù)</b>分配應(yīng)用

    嵌入式常用數(shù)據(jù)結(jié)構(gòu)有哪些

    在嵌入式編程中,數(shù)據(jù)結(jié)構(gòu)的選擇和使用對于程序的性能、內(nèi)存管理以及開發(fā)效率都具有重要影響。嵌入式系統(tǒng)由于資源受限(如處理器速度、內(nèi)存大小等),因此對數(shù)據(jù)結(jié)構(gòu)的選擇和使用尤為關(guān)鍵。以下是嵌入式編程中常用的幾種數(shù)據(jù)結(jié)構(gòu),結(jié)合具體特點和
    的頭像 發(fā)表于 09-02 15:25 ?810次閱讀

    高壓探頭的結(jié)構(gòu)及其應(yīng)用

    高壓探頭是一種用于測量高電壓的設(shè)備,廣泛應(yīng)用于電力系統(tǒng)、電力設(shè)備制造和維護等領(lǐng)域。本文將介紹高壓探頭的結(jié)構(gòu)組成以及其在電力行業(yè)中的應(yīng)用。
    的頭像 發(fā)表于 07-31 10:58 ?642次閱讀
    高壓探頭的<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>及其</b>應(yīng)用

    網(wǎng)絡(luò)爬蟲,Python和數(shù)據(jù)分析

    電子發(fā)燒友網(wǎng)站提供《網(wǎng)絡(luò)爬蟲,Python和數(shù)據(jù)分析.pdf》資料免費下載
    發(fā)表于 07-13 09:27 ?2次下載

    數(shù)據(jù)采集方法有哪些?工具有哪些?

    數(shù)據(jù)采集是數(shù)據(jù)分析和數(shù)據(jù)科學(xué)的基礎(chǔ),它涉及到從各種來源收集、整理和存儲數(shù)據(jù)的過程。以下是一些常見的數(shù)據(jù)采集方法和工具,以及它們的特點和應(yīng)用場
    的頭像 發(fā)表于 07-01 15:35 ?2079次閱讀

    常見的數(shù)據(jù)采集工具的介紹

    Scraping) 網(wǎng)絡(luò)爬蟲是一種自動化的程序,用于從互聯(lián)網(wǎng)上提取信息。它們可以訪問網(wǎng)頁,解析HTML內(nèi)容,并從中提取所需的數(shù)據(jù)。 Scrapy : 一個快速且強大的Python框架,用于抓取網(wǎng)站
    的頭像 發(fā)表于 07-01 14:51 ?1384次閱讀

    揭秘編程核心:基本數(shù)據(jù)結(jié)構(gòu)算法思想詳解

    描述問題的數(shù)據(jù)除了各數(shù)據(jù)元素本身,還要考慮各元素的邏輯關(guān)系,主要是一對一的線性關(guān)系,一對多的樹型關(guān)系和多對多的圖形關(guān)系。
    的頭像 發(fā)表于 04-25 11:51 ?1277次閱讀
    揭秘編程核心:基本<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>與<b class='flag-5'>算法</b>思想詳解

    探索編程世界的七大數(shù)據(jù)結(jié)構(gòu)

    結(jié)構(gòu)就像是一顆倒掛的小樹,有根、有枝、有葉。它是一種非線性的數(shù)據(jù)結(jié)構(gòu),以層級的方式存儲數(shù)據(jù),頂部是根節(jié)點,底部是葉節(jié)點。
    的頭像 發(fā)表于 04-16 12:04 ?526次閱讀
    主站蜘蛛池模板: 色猫成人网 | 夜夜春色| 女人张腿让男桶免费视频网站 | 看毛片网站| 欧美日韩国产一区二区三区不卡 | 免费艹逼视频 | 伊人网亚洲 | 久久艹人人艹 | 亚洲香蕉影院 | 老司机精品免费视频 | 国产亚洲精品在天天在线麻豆 | 久久国产福利 | 天堂va欧美ⅴa亚洲va一国产 | 天天操天天舔天天射 | 日本最黄视频 | 亚洲线精品一区二区三区 | 黄色美女网站免费看 | 午夜亚洲 | 欧美成人激情在线 | 一级一级一片免费高清 | 天天干天天色天天射 | 国模欢欢大尺度 | 三级高清 | 你懂得福利 | 大色视频| 26uuu影院亚洲欧美综合 | 人人射人人插 | 圆胖肥女人性视频 | 午夜爽 | 性欧美巨大 | 亚洲五月激情综合图片区 | 国产一区二区三区夜色 | 全是肉的高h短篇列车 | 欧美网站视频 | 五月婷综合 | 日日夜夜天天干 | 四虎在线永久免费视频网站 | 放荡女同老师和女同学生 | 四虎影业 | 日本黄色免费 | 国产高清免费不卡观看 |