最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python構建網頁爬蟲原理分析

 更新時間:2017年12月19日 14:17:33   投稿:laozhang  
這篇文章主要給大家講解了構建網頁爬蟲的技術原理以及實現的邏輯關系,有興趣的朋友閱讀下吧。

既然本篇文章說到的是Python構建網頁爬蟲原理分析,那么小編先給大家看一下Python中關于爬蟲的精選文章:

python實現簡單爬蟲功能的示例

python爬蟲實戰(zhàn)之最簡單的網頁爬蟲教程

網絡爬蟲是當今最常用的系統(tǒng)之一。最流行的例子是 Google 使用爬蟲從所有網站收集信息。除了搜索引擎之外,新聞網站還需要爬蟲來聚合數據源??磥恚灰阆刖酆洗罅康男畔?,你可以考慮使用爬蟲。

建立一個網絡爬蟲有很多因素,特別是當你想擴展系統(tǒng)時。這就是為什么這已經成為最流行的系統(tǒng)設計面試問題之一。在這篇文章中,我們將討論從基本爬蟲到大型爬蟲的主題,并討論在面試中可能會遇到的各種問題。

1 - 基本解決方案

如何建立一個基本的網絡爬蟲?

在系統(tǒng)設計面試之前,我們已經在《系統(tǒng)設計面試之前需要知道的八件事》中談到,就是從簡單的東西開始。讓我們專注于構建在單線程上運行的基本網頁爬蟲。有了這個簡單的解決方案,我們可以繼續(xù)優(yōu)化。

要抓取單個網頁,我們只需要向相應的 URL 發(fā)出 HTTP GET 請求,并解析響應數據,這是抓取工具的核心??紤]到這一點,一個基本的網絡爬蟲可以這樣工作:

以包含我們要抓取的所有網站的網址池開始。

對于每個 URL,發(fā)出 HTTP GET 請求來獲取網頁內容。

解析內容(通常為 HTML)并提取我們想要抓取的潛在網址。

添加新的網址到池中,并不斷抓取。

這取決于具體問題,有時我們可能會有一個獨立的系統(tǒng)來生成抓取網址。例如,一個程序可以不斷監(jiān)聽 RSS 訂閱,并且對于每個新文章,都可以將該 URL 添加到爬取池中。

2 - 規(guī)模問題

眾所周知,任何系統(tǒng)在擴展后都會面臨一系列問題。在網絡爬蟲中,將系統(tǒng)擴展到多臺機器時,有很多東西可能出錯。

在跳轉到下一節(jié)之前,請花幾分鐘的時間思考一下分布式網絡爬蟲的瓶頸,以及如何解決這個問題。在這篇文章的其余部分,我們將討論解決方案的幾個主要問題。

3 - 抓取頻率

你多久爬一次網站?

這聽起來可能不是什么大事,除非系統(tǒng)達到一定的規(guī)模,而且你需要非常新鮮的內容。例如,如果你想要獲取上一小時的最新消息,則抓取工具可能需要每隔一小時不斷抓取新聞網站。但是這有什么問題呢?

對于一些小型網站,他們的服務器很可能無法處理這種頻繁的請求。一種方法是遵循每個站點的robot.txt。對于不知道robot.txt是什么的人,這基本是網站與網絡爬蟲交流的標準。它可以指定不應該抓取什么文件,大多數網絡爬蟲都遵循配置。另外,你可以為不同的網站設置不同的抓取頻率。通常,每天只有幾個網站需要被多次抓取。

4 - 去重

在一臺機器上,你可以將 URL 池保留在內存中,并刪除重復的條目。但是,分布式系統(tǒng)中的事情變得更加復雜?;旧?,多個爬蟲可以從不同的網頁中提取相同的 URL,他們都希望將這個 URL 添加到 URL 池中。當然,多次抓取同一頁面是沒有意義的。那么我們如何去重復這些網址?

一種常用的方法是使用 Bloom Filter。簡而言之,布隆過濾器是一個節(jié)省空間的系統(tǒng),它允許你測試一個元素是否在一個集合中。但是,它可能有誤報。換句話說,如果布隆過濾器可以告訴你一個 URL 絕對不在池中,或者可能在池中。

為了簡要地解釋布隆過濾器是如何工作的,空布隆過濾器是m位(全0)的位數組。還有k個散列函數,將每個元素映射到m位中的一個。所以當我們在布隆過濾器中添加一個新的元素(URL)時,我們將從哈希函數中得到k位,并將它們全部設置為1.因此,當我們檢查一個元素的存在時,我們首先得到k位,如果它們中的任何一個不是1,我們立即知道該元素不存在。但是,如果所有的k位都是1,這可能來自其他幾個元素的組合。

布隆過濾器是一個非常常用的技術,它是一個完美的解決方案,用于在網絡爬蟲中去重網址。

5 - 解析

從網站獲取響應數據后,下一步是解析數據(通常是 HTML)來提取我們所關心的信息。這聽起來像一個簡單的事情,但是,可能很難使其健壯。

我們面臨的挑戰(zhàn)是,你總是會在 HTML 代碼中發(fā)現奇怪的標記,URL 等,很難涵蓋所有的邊界情況。例如,當 HTML 包含非 Unicode 字符時,你可能需要處理編解碼問題。另外,當網頁包含圖片,視頻甚至PDF 時,也會造成奇怪的行為。

另外,一些網頁都像使用 AngularJS 一樣通過 Javascript 呈現,你的抓取工具可能無法得到任何內容。

我會說沒有銀彈,不能為所有的網頁做一個完美的,健壯的爬蟲。你需要大量的健壯性測試,以確保它能夠按預期工作。

總結

還有很多我還沒有涉及到的有趣的話題,但是我想提一下其中的一些,這樣你就可以思考了。有一件事是檢測循環(huán)。許多網站包含鏈接,如A->B->C->A,你的爬蟲可能會永遠運行。想想如何解決這個問題?

另一個問題是 DNS 查找。當系統(tǒng)擴展到一定的水平時,DNS 查找可能是一個瓶頸,你可能要建立自己的 DNS 服務器。

與許多其他系統(tǒng)類似,擴展的網絡爬蟲可能比構建單個機器版本困難得多,并且在系統(tǒng)設計面試中可以討論許多事情。嘗試從一些樸素的解決方案開始,并繼續(xù)優(yōu)化它,這可以使事情變得比看起來更容易。

以上就是我們總結的關于網頁爬蟲的相關文章內容,大家如果還有其他想知道的可以在下方的留言區(qū)域討論,感謝大家對腳本之家的支持。

相關文章

  • Python實現繪圖散點圖(scatter)

    Python實現繪圖散點圖(scatter)

    這篇文章主要介紹了Python實現繪圖散點圖方式(scatter),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python元組定義及集合的使用

    Python元組定義及集合的使用

    這篇文章主要介紹了Python元組定義及集合的使用,元組是Python中的一個內置的數據結構,它是一個不可變的序列,所謂的不可變序列就是不可以進行增刪改的操作
    2022-07-07
  • python使用pyhook監(jiān)控鍵盤并實現切換歌曲的功能

    python使用pyhook監(jiān)控鍵盤并實現切換歌曲的功能

    這篇文章主要介紹了python使用pyhook監(jiān)控鍵盤并實現切換歌曲的功能,非??犰诺囊粋€小程序,可以讓你在游戲時避免切出游戲直接換歌,需要的朋友可以參考下
    2014-07-07
  • numpy中np.nanmax和np.max的區(qū)別及坑

    numpy中np.nanmax和np.max的區(qū)別及坑

    這篇文章主要介紹了numpy中np.nanmax和np.max的區(qū)別及坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • pyside+pyqt實現鼠標右鍵菜單功能

    pyside+pyqt實現鼠標右鍵菜單功能

    這篇文章主要為大家詳細介紹了pyside+pyqt實現鼠標右鍵菜單功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Django啟動時找不到mysqlclient問題解決方案

    Django啟動時找不到mysqlclient問題解決方案

    這篇文章主要介紹了Django啟動時找不到mysqlclient問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Pytorch 高效使用GPU的操作

    Pytorch 高效使用GPU的操作

    這篇文章主要介紹了Pytorch 高效使用GPU的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python中Mako庫實例用法

    python中Mako庫實例用法

    在本篇文章里小編給大家分享的是一篇關于python中Mako庫實例用法的相關文章,有需要的朋友們可以學習參考下。
    2020-12-12
  • Django靜態(tài)文件加載失敗解決方案

    Django靜態(tài)文件加載失敗解決方案

    這篇文章主要介紹了Django靜態(tài)文件加載失敗解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 使用Python-OpenCV向圖片添加噪聲的實現(高斯噪聲、椒鹽噪聲)

    使用Python-OpenCV向圖片添加噪聲的實現(高斯噪聲、椒鹽噪聲)

    這篇文章主要介紹了使用Python-OpenCV向圖片添加噪聲的實現(高斯噪聲、椒鹽噪聲) ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論

桓台县| 台山市| 白银市| 江川县| 楚雄市| 塘沽区| 朝阳县| 永丰县| 东乌珠穆沁旗| 农安县| 聊城市| 甘孜县| 岚皋县| 陕西省| 潮安县| 临桂县| 门源| 遂川县| 出国| 济阳县| 紫云| 昭通市| 合水县| 买车| 张家界市| 区。| 张家港市| 清丰县| 松江区| 曲阜市| 松阳县| 巢湖市| 锡林郭勒盟| 株洲市| 寻乌县| 自治县| 门头沟区| 弥渡县| 平山县| 星子县| 游戏|