亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python構(gòu)建網(wǎng)頁爬蟲原理分析

系統(tǒng) 1557 0

既然本篇文章說到的是Python構(gòu)建網(wǎng)頁爬蟲原理分析,那么小編先給大家看一下Python中關(guān)于爬蟲的精選文章:

python實(shí)現(xiàn)簡(jiǎn)單爬蟲功能的示例

python爬蟲實(shí)戰(zhàn)之最簡(jiǎn)單的網(wǎng)頁爬蟲教程

網(wǎng)絡(luò)爬蟲是當(dāng)今最常用的系統(tǒng)之一。最流行的例子是 Google 使用爬蟲從所有網(wǎng)站收集信息。除了搜索引擎之外,新聞網(wǎng)站還需要爬蟲來聚合數(shù)據(jù)源。看來,只要你想聚合大量的信息,你可以考慮使用爬蟲。

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

1 - 基本解決方案

如何建立一個(gè)基本的網(wǎng)絡(luò)爬蟲?

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

要抓取單個(gè)網(wǎng)頁,我們只需要向相應(yīng)的 URL 發(fā)出 HTTP GET 請(qǐng)求,并解析響應(yīng)數(shù)據(jù),這是抓取工具的核心。考慮到這一點(diǎn),一個(gè)基本的網(wǎng)絡(luò)爬蟲可以這樣工作:

以包含我們要抓取的所有網(wǎng)站的網(wǎng)址池開始。

對(duì)于每個(gè) URL,發(fā)出 HTTP GET 請(qǐng)求來獲取網(wǎng)頁內(nèi)容。

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

添加新的網(wǎng)址到池中,并不斷抓取。

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

2 - 規(guī)模問題

眾所周知,任何系統(tǒng)在擴(kuò)展后都會(huì)面臨一系列問題。在網(wǎng)絡(luò)爬蟲中,將系統(tǒng)擴(kuò)展到多臺(tái)機(jī)器時(shí),有很多東西可能出錯(cuò)。

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

3 - 抓取頻率

你多久爬一次網(wǎng)站?

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

對(duì)于一些小型網(wǎng)站,他們的服務(wù)器很可能無法處理這種頻繁的請(qǐng)求。一種方法是遵循每個(gè)站點(diǎn)的robot.txt。對(duì)于不知道robot.txt是什么的人,這基本是網(wǎng)站與網(wǎng)絡(luò)爬蟲交流的標(biāo)準(zhǔn)。它可以指定不應(yīng)該抓取什么文件,大多數(shù)網(wǎng)絡(luò)爬蟲都遵循配置。另外,你可以為不同的網(wǎng)站設(shè)置不同的抓取頻率。通常,每天只有幾個(gè)網(wǎng)站需要被多次抓取。

4 - 去重

在一臺(tái)機(jī)器上,你可以將 URL 池保留在內(nèi)存中,并刪除重復(fù)的條目。但是,分布式系統(tǒng)中的事情變得更加復(fù)雜。基本上,多個(gè)爬蟲可以從不同的網(wǎng)頁中提取相同的 URL,他們都希望將這個(gè) URL 添加到 URL 池中。當(dāng)然,多次抓取同一頁面是沒有意義的。那么我們?nèi)绾稳ブ貜?fù)這些網(wǎng)址?

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

為了簡(jiǎn)要地解釋布隆過濾器是如何工作的,空布隆過濾器是m位(全0)的位數(shù)組。還有k個(gè)散列函數(shù),將每個(gè)元素映射到m位中的一個(gè)。所以當(dāng)我們?cè)诓悸∵^濾器中添加一個(gè)新的元素(URL)時(shí),我們將從哈希函數(shù)中得到k位,并將它們?nèi)吭O(shè)置為1.因此,當(dāng)我們檢查一個(gè)元素的存在時(shí),我們首先得到k位,如果它們中的任何一個(gè)不是1,我們立即知道該元素不存在。但是,如果所有的k位都是1,這可能來自其他幾個(gè)元素的組合。

布隆過濾器是一個(gè)非常常用的技術(shù),它是一個(gè)完美的解決方案,用于在網(wǎng)絡(luò)爬蟲中去重網(wǎng)址。

5 - 解析

從網(wǎng)站獲取響應(yīng)數(shù)據(jù)后,下一步是解析數(shù)據(jù)(通常是 HTML)來提取我們所關(guān)心的信息。這聽起來像一個(gè)簡(jiǎn)單的事情,但是,可能很難使其健壯。

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

另外,一些網(wǎng)頁都像使用 AngularJS 一樣通過 Javascript 呈現(xiàn),你的抓取工具可能無法得到任何內(nèi)容。

我會(huì)說沒有銀彈,不能為所有的網(wǎng)頁做一個(gè)完美的,健壯的爬蟲。你需要大量的健壯性測(cè)試,以確保它能夠按預(yù)期工作。

總結(jié)

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

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

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

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 神马视频我不卡 | 国产成人久久精品二区三区 | 极品女神西比尔久久精品 | 欧美成一级 | 韩国色三级伦不卡高清在线观看 | 日韩欧美亚洲综合久久影院d3 | 国产精品主播在线 | 久久视精品 | 久久涩精品 | 青青草一区二区免费精品 | 亚洲一成人毛片 | 男人的天堂一区二区视频在线观看 | 欧美日韩一二三区免费视频观看 | 成人黄色一级毛片 | 久久精品网站免费观看调教 | 亚洲国产综合精品中文字幕 | 久草久操 | 伊人第一路线 | 日韩欧美精品一区二区三区 | 四虎1515hh免费大炮社区 | 97总资源| 久久精品亚洲99一区二区 | 国产片久久| 奇米影视第四色在线 | 日本不卡三区 | 久久国内免费视频 | 国产伦码精品一区二区 | a成人毛片免费观看 | 精品日韩一区二区三区 | 东北老妇露脸xxxxx | 日韩一区视频在线 | 破外女出血一级毛片 | 国产精品模特hd在线 | 欧美a视频 | 最近中文日本字幕免费完整 | 深夜福利网址 | 中文字幕在线观看国产 | 91亚洲精品久久 | 奇米第| 伊人久久综合影院首页 | 香蕉网在线播放 |