18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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ī)則,自動(dòng)的抓取萬維網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)爬蟲是搜索引擎系統(tǒng)中十分重要的組成部分,它負(fù)責(zé)從互 聯(lián)網(wǎng)中搜集網(wǎng)頁,采集信息,這些網(wǎng)頁信息用于建立索引從而為搜索 引擎提供支持,它決定著整個(gè)引擎系統(tǒng)的內(nèi)容是否豐富,信息是否即 時(shí),因此其性能的優(yōu)劣直接影響著搜索引擎的效果。

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

1.世界上最簡(jiǎn)單的爬蟲——三行情詩

我們先來看一個(gè)最簡(jiǎn)單的最簡(jiǎn)單的爬蟲,用python寫成,只需要三行。

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

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

是好男人,

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

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

2.一個(gè)正常的爬蟲程序

上面那個(gè)最簡(jiǎn)單的爬蟲,是一個(gè)不完整的殘疾的爬蟲。因?yàn)榕老x程序通常需要做的事情如下

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

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

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

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

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                               #我們?cè)O(shè)定終止條件為:爬取到100000個(gè)頁面時(shí),就不玩了
 
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)在來找茬

上面那個(gè)完整的爬蟲,不足20行代碼,相信你能找出20個(gè)茬來。因?yàn)樗娜秉c(diǎn)實(shí)在是太多。下面一一列舉它的N宗罪:

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

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

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

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

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

6)…..

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

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

1)并行爬起問題

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

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

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

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

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

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

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

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

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

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

3)DNS緩存

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

4)網(wǎng)頁去重

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

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

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

6)進(jìn)程間通信

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

7)……

廢話說了那么多,真正的問題來了,問題不是學(xué)挖掘機(jī)到底哪家強(qiáng)?而是如何實(shí)現(xiàn)上面這些東西?。海?/p>

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

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

    關(guān)注

    23

    文章

    4743

    瀏覽量

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

    關(guān)注

    3

    文章

    573

    瀏覽量

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

    關(guān)注

    0

    文章

    86

    瀏覽量

    7835

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    從 0 到 1:用 PHP 爬蟲優(yōu)雅地拿下京東商品詳情

    在電商數(shù)據(jù)驅(qū)動(dòng)的時(shí)代, 商品詳情數(shù)據(jù) 成為市場(chǎng)分析、價(jià)格監(jiān)控、競(jìng)品調(diào)研的核心燃料。京東作為國內(nèi)頭部電商平臺(tái),其商品信息豐富、更新頻繁,是數(shù)據(jù)開發(fā)者眼中的“香餑餑”。 本文將帶你 從 0 到 1 ,用
    的頭像 發(fā)表于 09-23 16:42 ?410次閱讀
    從 0 到 1:用 PHP <b class='flag-5'>爬蟲</b>優(yōu)雅地拿下京東商品詳情

    Nginx限流與防爬蟲配置方案

    在互聯(lián)網(wǎng)業(yè)務(wù)快速發(fā)展的今天,網(wǎng)站面臨著各種流量沖擊和惡意爬蟲的威脅。作為運(yùn)維工程師,我們需要在保證正常用戶訪問的同時(shí),有效防范惡意流量和爬蟲攻擊。本文將深入探討基于Nginx的限流與防爬蟲解決方案,從原理到實(shí)踐,為大家提供一套完
    的頭像 發(fā)表于 09-09 15:52 ?487次閱讀

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】6、使用protoc-gen-gorm生成標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu)

    在設(shè)計(jì)espnow協(xié)議的時(shí)候,考慮到我需要在esp32,Linux設(shè)備,web上使用相同的數(shù)據(jù)結(jié)構(gòu),那就需要考慮一下,是否使用一個(gè)通用的跨平臺(tái)序列化數(shù)據(jù)結(jié)構(gòu)。這時(shí)候我想起了protobuf,這個(gè)就是
    發(fā)表于 08-26 00:32

    盤點(diǎn)嵌入式就業(yè)所需要的技能有哪些?

    語言,如C/C++、Java等。 - 掌握操作系統(tǒng)原理,了解Linux/Android等操作系統(tǒng)的內(nèi)核架構(gòu)和驅(qū)動(dòng)開發(fā)。 - 具備良好的數(shù)據(jù)結(jié)構(gòu)算法基礎(chǔ),能夠進(jìn)行高性能計(jì)算和數(shù)據(jù)處理。 - 了解智能手機(jī)
    發(fā)表于 08-11 15:43

    ESP32-運(yùn)行網(wǎng)頁服務(wù)器(Web Server)-實(shí)用篇

    在前一篇文章《ESP32-運(yùn)行網(wǎng)頁服務(wù)器(WebServer)-入門篇》,我們介紹了ESP32運(yùn)行網(wǎng)頁服務(wù)器(WebServer)的原理,然后我們基于ESP32實(shí)現(xiàn)了一個(gè)demo代碼;看到很多同學(xué)都留言發(fā)表了自己的看法,有很多同學(xué)都基于這個(gè)原理實(shí)現(xiàn)了很多有意思的應(yīng)用;這里
    的頭像 發(fā)表于 07-28 18:05 ?2069次閱讀
    ESP32-運(yùn)行<b class='flag-5'>網(wǎng)頁</b>服務(wù)器(Web Server)-實(shí)用篇

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對(duì)C語言在數(shù)據(jù)結(jié)構(gòu)算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開發(fā)
    發(fā)表于 05-13 16:45

    如何用Brower Use WebUI實(shí)現(xiàn)網(wǎng)頁數(shù)據(jù)智能抓取與分析?

    ? 作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 Browser-use是一款能讓AI智能體像人類一樣操作網(wǎng)頁的創(chuàng)新工具,與傳統(tǒng)網(wǎng)絡(luò)爬蟲技術(shù)相比,Browser-use能模擬人瀏覽并操作網(wǎng)頁,在采集網(wǎng)站
    的頭像 發(fā)表于 04-17 17:48 ?710次閱讀
    如何用Brower Use WebUI實(shí)現(xiàn)<b class='flag-5'>網(wǎng)頁數(shù)據(jù)</b>智能抓取與分析?

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

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

    沖壓成形的基本工序_沖壓模具及其結(jié)構(gòu)設(shè)計(jì)

    什么是沖壓?沖壓的特點(diǎn)?沖壓成形的基本工序有哪些?沖壓模具及其結(jié)構(gòu)如何設(shè)計(jì)?帶著這些問題,今天小編跟大家一起學(xué)習(xí)一下。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
    的頭像 發(fā)表于 02-07 09:13 ?898次閱讀
    沖壓成形的基本工序_沖壓模具<b class='flag-5'>及其</b><b class='flag-5'>結(jié)構(gòu)</b>設(shè)計(jì)

    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ò)運(yùn)營(yíng)商、訪
    的頭像 發(fā)表于 12-23 10:13 ?561次閱讀

    康謀方案 | 多源相機(jī)數(shù)據(jù)采集與算法集成測(cè)試方案

    如何滿足不同應(yīng)用場(chǎng)景下對(duì)圖像采集和算法測(cè)試的多樣化需求?本文為您帶來多源相機(jī)數(shù)據(jù)采集與算法集成測(cè)試方案,通過BRICKplus/BRICK2與ADTF的結(jié)合,輕松實(shí)現(xiàn)多源相機(jī)快速集成和數(shù)據(jù)
    的頭像 發(fā)表于 12-11 09:59 ?3845次閱讀
    康謀方案 | 多源相機(jī)<b class='flag-5'>數(shù)據(jù)</b>采集與<b class='flag-5'>算法</b>集成測(cè)試方案

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介

    內(nèi)容簡(jiǎn)介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

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

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

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

    在研究機(jī)器視覺算法之前,我們需要先了解機(jī)器視覺應(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 ?1790次閱讀
    視覺軟件HALCON的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>

    AIGC算法解析及其發(fā)展趨勢(shì)

    、AIGC算法解析 核心基礎(chǔ) 人工智能算法 :AIGC技術(shù)的基礎(chǔ)和靈魂,如深度學(xué)習(xí)、機(jī)器學(xué)習(xí)等算法,使機(jī)器能夠模擬人類的思考和行為過程,從而自主地完成各種任務(wù)。這些算法通過不斷地學(xué)習(xí)和
    的頭像 發(fā)表于 10-25 15:35 ?2298次閱讀