<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2640字,需瀏覽 6分鐘

           ·

          2021-01-15 23:22

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




          了解任務(wù)


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




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



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

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



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


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




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


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


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


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


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


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


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


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




          城市網(wǎng)址


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


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



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




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


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



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


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




          代碼編程


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


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




          改 Bug


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


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


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


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


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



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



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


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




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


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


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


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


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


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


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


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


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



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


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





          總結(jié)


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


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


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


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


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


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


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


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


          最后,可能有人疑問(wèn):我閑著沒事,去下載這些醫(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="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一区二区三区四区精品 | 国产无码自拍视频 | 91视频免费在线观看 | www.亚洲电影 | 色婷婷亚洲第一 |