<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    小科普:數(shù)據(jù)爬蟲究竟是在干啥

    共 2640字,需瀏覽 6分鐘

     ·

    2021-01-15 23:22

    今天有個(gè)小目標(biāo):用一個(gè)網(wǎng)站實(shí)例來做展示,給大家科普下數(shù)據(jù)爬蟲工作的過程。不知道最終效果如何,如果你能看到最后,不妨評(píng)論下你的感受。




    了解任務(wù)


    首先,選定的網(wǎng)站是 愛爾眼科官網(wǎng)?https://www.aierchina.com/




    通常,醫(yī)院官網(wǎng)比較有價(jià)值的數(shù)據(jù)是它在全國(guó)各城市的醫(yī)院門店信息,比如我選擇主頁上的【找醫(yī)院】-【山東省】-【東營(yíng)】,便會(huì)進(jìn)入東營(yíng)市醫(yī)院信息頁面:



    選擇后省份、城市后,瀏覽器會(huì)跳轉(zhuǎn)到:

    https://www.aierchina.com/hospital/shandong/dongying.html



    該頁面上所有醫(yī)院的地址、項(xiàng)目、時(shí)間等信息數(shù)據(jù),便是我們想要獲取的有價(jià)值信息。


    到這里,我們的任務(wù)目標(biāo)就比較明確了:將愛爾眼科官網(wǎng)上所有省份城市的醫(yī)院數(shù)據(jù)全部下載下來。




    設(shè)計(jì)方法


    如果完全不懂代碼編程,那么完成上面的任務(wù),就是手動(dòng)一個(gè)個(gè)選擇各個(gè)城市、進(jìn)入所有城市醫(yī)院信息的頁面,然后將每家醫(yī)院的信息復(fù)制、粘貼到表格中。


    愛爾眼科網(wǎng)站展示的醫(yī)院數(shù)目約 450 多條,順利的話,手動(dòng)能幾天內(nèi)搞定。


    那么如果想用代碼來自動(dòng)化實(shí)現(xiàn)上面的過程,要怎么操作呢?


    首先你要知道,網(wǎng)站頁面上展示的所有信息,其實(shí)是在你輸入網(wǎng)址、敲下回車之后,瀏覽器發(fā)出了請(qǐng)求、接收到返回信息、再展示給你的。


    那么代碼編程,就可以不用再去打開瀏覽器、輸入網(wǎng)址敲回車,而是直接通過代碼來直接發(fā)送請(qǐng)求。


    原本是瀏覽器接收到返回信息,再展現(xiàn)給我們;代碼編程就可以拿到返回的信息,直接對(duì)這些信息處理、提取關(guān)鍵數(shù)據(jù)。


    回歸到愛爾眼科官網(wǎng),我們首先需要獲取到每個(gè)城市頁面對(duì)應(yīng)的網(wǎng)址,然后在城市頁面上提取展示的醫(yī)院信息。




    城市網(wǎng)址


    剛有說代碼會(huì)直接發(fā)送請(qǐng)求來獲取網(wǎng)站返回的信息,怎么理解呢?可以在任意網(wǎng)站上【點(diǎn)擊鼠標(biāo)右鍵】-【查看網(wǎng)頁源代碼】,這里展示的與網(wǎng)站返回信息比較接近了。


    比如,愛爾眼科官網(wǎng)首頁-查看網(wǎng)頁源代碼,向下拉到大概 600 多行:



    基本每個(gè)城市對(duì)應(yīng)一個(gè)網(wǎng)址,看著特別像所有城市的網(wǎng)址。暫且先把它當(dāng)成我們第一步要用代碼提取的信息,OK,我們現(xiàn)在已經(jīng)拿到了所有城市對(duì)應(yīng)的城市頁面網(wǎng)址了。




    醫(yī)院數(shù)據(jù)


    拿到了城市頁面的網(wǎng)址,我們也可以通過【網(wǎng)頁源代碼】查找其中醫(yī)院信息:



    用代碼將其中所有醫(yī)院數(shù)據(jù)提取出來,我們便完成了對(duì)一個(gè)城市所有醫(yī)院信息的抓取數(shù)據(jù)工作。


    既然一個(gè)城市的抓數(shù)流程走通了,便可以對(duì)之前提取到的所有城市網(wǎng)址鏈接都進(jìn)行同樣的流程,從而獲取到所有城市的醫(yī)院數(shù)據(jù)了。




    代碼編程


    梳理出上面的思路,最重要的便是寫代碼來實(shí)現(xiàn)整個(gè)過程了。這里我不展開具體代碼邏輯,之前我自學(xué) Python 時(shí)覺得用 Python 寫爬蟲比較輕松,工作里接觸到 NodeJS 爬蟲,對(duì)比著會(huì)覺得其它編程語言來寫爬蟲也沒有那么麻煩。


    所以只要合適、自己能上手,選擇什么編程語言其實(shí)沒那么重要,只不過換了種語法來把我們?cè)O(shè)計(jì)的流程實(shí)現(xiàn)罷了。




    改 Bug


    如果身邊有程序員朋友,可能會(huì)經(jīng)常聽到他們說【改 Bug】,那究竟啥是【改 Bug】呢?


    Bug,漏洞,也就是代碼中錯(cuò)誤的地方。


    而我,恰好在愛爾眼科官網(wǎng)首頁上,就發(fā)現(xiàn)了不少問題,也就是剛提到的不少 Bug。


    如果你有在愛爾眼科上班的朋友,可以順手把這些問題轉(zhuǎn)給他看了。


    剛我們?cè)谑醉摰摹揪W(wǎng)頁源代碼】中找到了各個(gè)城市對(duì)應(yīng)的網(wǎng)址鏈接,其實(shí)這里面的上百條鏈接中,有13條拼寫錯(cuò)誤:



    看代碼可能比較頭大,可以在手機(jī)端訪問? https://www.aierchina.com/?打開愛爾眼科官網(wǎng),點(diǎn)擊右上角的選擇定位按鈕,選到首字母 B 的蚌埠(或者首字母 C 的池州,總共有 13 個(gè)城市會(huì)報(bào)錯(cuò))



    共有13個(gè)城市的鏈接有問題,原因部分是拼寫錯(cuò)誤、部分是省份和城市拼接錯(cuò)誤,比如原本山東臨沂錯(cuò)拼成 shanxi/linyi,再比如陜西西安拼成 shanxixi/xian,還挺潮的,陜西西。


    這些由于程序員寫代碼時(shí)造成的錯(cuò)誤,就是常說的 Bug 漏洞的一些例子,而改 Bug 就是將這些錯(cuò)誤改正,使得用戶使用時(shí)頁面可以正常跳轉(zhuǎn)。




    抓數(shù)優(yōu)化


    剛我們梳理了整個(gè)抓取數(shù)據(jù)的過程,定位到錯(cuò)誤的城市網(wǎng)址并進(jìn)行改正,理論上應(yīng)該能拿到所有城市醫(yī)院數(shù)據(jù)了。


    但是,官網(wǎng)首頁代碼中的城市鏈接是不全的,直接體現(xiàn)就是手機(jī)端訪問愛爾眼科官網(wǎng),城市列表比電腦端可選的要少。


    既然有遺漏,那么我們就沒有把城市抓全,自然就要去檢查缺了哪些然后去補(bǔ)上。


    我第一遍抓取這網(wǎng)站的時(shí)候,就是遇到了這個(gè)坑。


    細(xì)心的話,你應(yīng)該也發(fā)現(xiàn)了,電腦端展示省份和城市的方式,和手機(jī)端展示城市的列表方式,是有些差別的。


    是的,換句話說,剛我們遇到的問題、Bug,來自于移動(dòng)端所依賴的城市網(wǎng)址們。


    想要完全解決這個(gè)問題,我們需要從電腦端選擇省份、城市的方式上去找思路。


    最終,我也是在網(wǎng)站返回的數(shù)據(jù)中,找到了相關(guān)省份城市的數(shù)據(jù),它沒有直接展現(xiàn)在頁面上,而是藏在了 JS 代碼中,從而拿到了完整的城市網(wǎng)址數(shù)據(jù)。



    拿到完整的城市網(wǎng)址數(shù)據(jù),便解決了遺漏城市的問題,我們的抓取所有城市醫(yī)院數(shù)據(jù)的任務(wù)才算圓滿完成。


    最終把得到的數(shù)據(jù)寫到 Excel 表格中,大致樣子如下:





    總結(jié)


    看到這,如果對(duì)編程不感興趣,我猜你已經(jīng)覺得麻煩了吧。


    在上面的抓取數(shù)據(jù)過程中,我們用代碼編寫的程序,像是一個(gè)個(gè)蜘蛛(爬蟲),在網(wǎng)絡(luò)上去獲取我們想要的數(shù)據(jù)——也因此,抓取數(shù)據(jù)又被稱為爬蟲、爬取數(shù)據(jù)。


    但上面描述的過程,全部都沒有提及編寫代碼來實(shí)現(xiàn)這個(gè)過程,其實(shí)這個(gè)才是程序員實(shí)際的勞動(dòng),其中也會(huì)有各種細(xì)節(jié)要處理,去發(fā)現(xiàn)并解決各種 Bug。


    看到這,應(yīng)該能理解為什么高級(jí)程序員都是絕頂聰明了吧。


    而上面描述的這個(gè)抓取數(shù)據(jù)的任務(wù),只能算初級(jí)難度的爬蟲任務(wù),因?yàn)樵谡麄€(gè)過程中,網(wǎng)站并沒有對(duì)我們做限制、我們提取數(shù)據(jù)的過程也沒有太多障礙。


    一旦網(wǎng)站對(duì)我們?cè)L問做些限制,比如驗(yàn)證碼;或者將數(shù)據(jù)進(jìn)行處理,比如設(shè)置編碼格式或加密,那么我們就需要將這些困難一個(gè)個(gè)克服來獲取最終的結(jié)果。


    以上,便是一個(gè)完整抓取愛爾眼科網(wǎng)站上醫(yī)院數(shù)據(jù)的流程了,感受如何?


    如果有朋友還不知道爬蟲、程序員每天都在干啥,也可以給他科普科普了~


    最后,可能有人疑問:我閑著沒事,去下載這些醫(yī)院數(shù)據(jù)干嘛?


    醫(yī)院數(shù)據(jù)的價(jià)值可能不好直接體現(xiàn),不妨把它換成一個(gè)個(gè)用戶數(shù)據(jù)……

    瀏覽 58
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    国精品人伦一区二区三区蜜桃 | 台湾无码在线观看 | 操逼网123首页 | 五月天成人在线观看视频 | 91大香蕉 |