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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網頁爬蟲及其用到的算法和數據結構

算法與數據結構 ? 來源:快課網 ? 作者:Jay13 ? 2022-12-02 11:30 ? 次閱讀

網絡爬蟲,是一種按照一定的規則,自動的抓取萬維網信息的程序或者腳本。網絡爬蟲是搜索引擎系統中十分重要的組成部分,它負責從互 聯網中搜集網頁,采集信息,這些網頁信息用于建立索引從而為搜索 引擎提供支持,它決定著整個引擎系統的內容是否豐富,信息是否即 時,因此其性能的優劣直接影響著搜索引擎的效果。

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

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

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

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

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

是好男人,

就應該在和女友吵架時,

抱著必輸的心態。

2.一個正常的爬蟲程序

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

1)給定的種子URLs,爬蟲程序將所有種子URL頁面爬取下來

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

3)重復1、2步,直到達到指定條件才結束爬取

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

import requests                       #用來爬取網頁
from bs4 import BeautifulSoup         #用來解析網頁
seds = ["http://www.hao123.com",      #我們的種子
              "http://www.csdn.net",
              "http://www.cricode.com"]
sum = 0                               #我們設定終止條件為:爬取到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",.....)                     //解析網頁
         for url in urls:
              seds.append(url)
 
    else:
         break

3.現在來找茬

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

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

2)種子URL和后續解析到的URL都放在一個列表里,我們應該設計一個更合理的數據結構來存放這些待爬取的URL才是,比如隊列或者優先隊列。

3)對各個網站的url,我們一視同仁,事實上,我們應當區別對待。大站好站優先原則應當予以考慮。

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

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

6)…..

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

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

1)并行爬起問題

我們可以有多重方法去實現并行。

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

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

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

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

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

2)待爬取網頁隊列

如何對待待抓取隊列,跟操作系統如何調度進程是類似的場景。

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

當然,你也可以效仿操作系統的進程調度策略之多級反饋隊列調度算法。

3)DNS緩存

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

4)網頁去重

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

5)數據存儲的問題

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

6)進程間通信

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

7)……

廢話說了那么多,真正的問題來了,問題不是學挖掘機到底哪家強?而是如何實現上面這些東西?。海?/p>

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

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

    關注

    23

    文章

    4612

    瀏覽量

    92891
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40130
  • 爬蟲
    +關注

    關注

    0

    文章

    82

    瀏覽量

    6880

原文標題:網頁爬蟲及其用到的算法和數據結構

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    IP地址數據信息和爬蟲攔截的關聯

    IP地址數據信息和爬蟲攔截的關聯主要涉及到兩方面的內容,也就是數據信息和爬蟲。IP 地址數據信息的內容豐富,包括所屬地域、所屬網絡運營商、訪
    的頭像 發表于 12-23 10:13 ?43次閱讀

    DDC264配置寄存器數據寫入和320 DCLK時鐘脈沖后的回讀數據結構是什么?

    配置寄存器數據寫入和320 DCLK時鐘脈沖后的回讀數據結構是什么? 根據注和表9,16位配置寄存器數據,4位修訂ID, 300位校驗模式,怎么可能有1024 TOTAL READBACK BITS, format = 0
    發表于 11-19 07:58

    視覺軟件HALCON的數據結構

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

    如何利用海外爬蟲IP進行數據抓取

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

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

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

    AN-1926:M-LVDS簡介及其時鐘和數據分配應用

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

    嵌入式常用數據結構有哪些

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

    網絡爬蟲,Python和數據分析

    電子發燒友網站提供《網絡爬蟲,Python和數據分析.pdf》資料免費下載
    發表于 07-13 09:27 ?1次下載

    數據采集方法有哪些?工具有哪些?

    數據采集是數據分析和數據科學的基礎,它涉及到從各種來源收集、整理和存儲數據的過程。以下是一些常見的數據采集方法和工具,以及它們的特點和應用場
    的頭像 發表于 07-01 15:35 ?1340次閱讀

    探索編程世界的七大數據結構

    結構就像是一顆倒掛的小樹,有根、有枝、有葉。它是一種非線性的數據結構,以層級的方式存儲數據,頂部是根節點,底部是葉節點。
    的頭像 發表于 04-16 12:04 ?388次閱讀

    TASKING編譯器是否可以將數據結構設置為 \"打包\"?

    TASKING 編譯器是否可以將數據結構設置為 \"打包\"? GCC 很早以前就提供了這種可能性,可以將__attribute__((packed))與對齊指令結合使用。 對于
    發表于 03-05 06:00

    全球新聞網封鎖OpenAI和谷歌AI爬蟲

    分析結果顯示,至2023年底,超半數(57%)的傳統印刷媒體如《紐約時報》等已關閉OpenAI爬蟲,反之電視廣播以及數字原生媒體相應地分別為48%和31%。而對于谷歌人工智能爬蟲,32%的印刷媒體采取相同措施,電視廣播和數字原生
    的頭像 發表于 02-27 15:31 ?856次閱讀

    矢量與柵格數據結構各有什么特征

    矢量數據結構和柵格數據結構是地理信息系統(GIS)中最常用的兩種數據結構。它們在存儲和表示地理要素上有著不同的方法和特征。在接下來的文章中,我們將詳細介紹這兩種數據結構并比較它們的特點
    的頭像 發表于 02-25 15:06 ?2572次閱讀

    區塊鏈是什么樣的數據結構組織

    區塊鏈是一種特殊的數據結構,它以分布式、去中心化的方式組織和存儲數據。區塊鏈的核心原理是將數據分布在網絡的各個節點上,通過密碼學算法保證數據
    的頭像 發表于 01-11 10:57 ?2249次閱讀

    C語言數據結構之跳表詳解

    大家好,今天分享一篇C語言數據結構相關的文章--跳表。
    的頭像 發表于 12-29 09:32 ?831次閱讀
    C語言<b class='flag-5'>數據結構</b>之跳表詳解
    主站蜘蛛池模板: 97人人草| 国产亚洲papapa| 男女网站在线观看| 毛片大全免费| 天天爱天天做天天干| 黄黄视频在线观看| 黄色大片视频在线观看| 深夜福利一区| 欧美性狂猛xxxxxbbbbb| 国产亚洲人成a在线v网站| 夜夜综合网| 好吊日在线| 亚洲无线码一区在线观看| 色综合天天综合网国产人| 扛着高跟鞋丝袜腿呻吟视频| 国产精品麻豆va在线播放| 五月天婷婷网站| 2017天天天天做夜夜夜做| 国产精品久久久久免费| 色一区二区| 午夜神马福利影院| 天天综合网网欲色| 色五月视频| 午夜视频1000部免费看| 亚洲精品成人a| 婷婷在线影院| 在线免费黄色网址| 成人午夜久久| 曰本在线| 成人欧美一区二区三区| 视频在线h| 日本三级黄色录像| 免费国产午夜高清在线视频| 亚洲欧美视频网站| 久久久噜噜噜久久久| 天天射日| 亚洲欧美综合一区二区三区四区| 欧美一级视频在线观看欧美| 日本一级黄色毛片| 狠狠色噜噜狠狠狠狠五月婷| 欧美一区二区三区大片|