• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種醫(yī)生推薦的爬蟲(chóng)設(shè)計(jì)程序

      2022-03-11 12:30:44崔智博楊金靈李欣儀宋青樺聞柏智
      電腦知識(shí)與技術(shù) 2022年1期
      關(guān)鍵詞:網(wǎng)絡(luò)爬蟲(chóng)數(shù)據(jù)可視化數(shù)據(jù)分析

      崔智博 楊金靈 李欣儀 宋青樺 聞柏智

      摘要:網(wǎng)絡(luò)信息復(fù)雜繁多與日俱增,人們?cè)絹?lái)越重視對(duì)數(shù)據(jù)的研究,為了有針對(duì)性地檢測(cè)提取數(shù)據(jù),一種全新的搜索引擎技術(shù)應(yīng)運(yùn)而生,最大限度上解決了網(wǎng)絡(luò)信息冗雜難辨的問(wèn)題,使信息更加簡(jiǎn)潔、有針對(duì)性。與早期的搜索引擎原理類(lèi)似,該文采取春雨醫(yī)生及患者作為實(shí)驗(yàn)樣本,通過(guò)醫(yī)患聊天對(duì)話框比率、醫(yī)生職稱(chēng)的加權(quán)、綜合數(shù)據(jù)整理分析得出醫(yī)生的綜合素質(zhì)水平評(píng)分,為患者就醫(yī)提供有價(jià)值的信息,對(duì)癥就醫(yī),為患者精準(zhǔn)對(duì)接醫(yī)生提供了可靠的信息支持。

      關(guān)鍵詞:Python;網(wǎng)絡(luò)爬蟲(chóng);數(shù)據(jù)分析;數(shù)據(jù)可視化;熱力圖

      中圖分類(lèi)號(hào):TP393? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

      文章編號(hào):1009-3044(2022)01-0020-03

      1 引言?

      隨著對(duì)科技領(lǐng)域的深入研究,接收信息的科技手段不斷創(chuàng)新,人們每天接收著海量信息,繁雜的信息與緊張的時(shí)間碰撞,由此,在短暫的時(shí)間內(nèi)找到有價(jià)值的信息才能更好地利用信息為人們服務(wù)。通過(guò)采用爬蟲(chóng)、數(shù)據(jù)分析技術(shù),將數(shù)據(jù)入庫(kù)進(jìn)行壓縮過(guò)濾,進(jìn)而通過(guò)數(shù)據(jù)可視化生成一個(gè)顯而易見(jiàn)的熱力圖,再對(duì)各個(gè)科室的醫(yī)生進(jìn)行對(duì)比。此項(xiàng)技術(shù)可應(yīng)用于多個(gè)行業(yè),如企業(yè)發(fā)展趨勢(shì)、社會(huì)輿情管控、市場(chǎng)基礎(chǔ)調(diào)研等。由于Python的第三方庫(kù)非常豐富,采用re、urllib、BeautifulSoup、Matplotlib等多方法庫(kù)對(duì)數(shù)據(jù)進(jìn)行爬取、分析。此技術(shù)適合解決處理數(shù)據(jù)提取分析問(wèn)題,可在多個(gè)行業(yè)領(lǐng)域推廣。

      2 算法設(shè)計(jì)原理

      本程序用Python作為開(kāi)發(fā)語(yǔ)言,Pycharm作為開(kāi)發(fā)工具,Excel用于保存數(shù)據(jù),春雨醫(yī)生作為爬取對(duì)象。

      2.1 搜索引擎的原理

      通過(guò)編寫(xiě)爬蟲(chóng)程序,獲取到網(wǎng)頁(yè)內(nèi)容,把內(nèi)容放入一個(gè)臨時(shí)庫(kù)進(jìn)行處理,如數(shù)據(jù)的壓縮、過(guò)濾等,經(jīng)過(guò)處理的數(shù)據(jù)再存儲(chǔ)到新的數(shù)據(jù)庫(kù)里,把這些數(shù)據(jù)做出索引,每個(gè)索引對(duì)應(yīng)常見(jiàn)的列表和內(nèi)容,當(dāng)用戶(hù)想要輸入關(guān)鍵字時(shí),索引可以快速定位到數(shù)據(jù)庫(kù)里的數(shù)據(jù),提供給用戶(hù)并形成一個(gè)界面,這就是搜索引擎的功能,每次搜索并不是讓爬蟲(chóng)現(xiàn)在去爬一次,而是從爬蟲(chóng)爬好的數(shù)據(jù)里,去提取出來(lái)。該原理前半部分是爬蟲(chóng),后半部分是數(shù)據(jù)可視化(圖1)。

      2.2爬蟲(chóng)

      網(wǎng)絡(luò)爬蟲(chóng)又叫作網(wǎng)絡(luò)蜘蛛,它是一種按照特定規(guī)則,自動(dòng)捕獲網(wǎng)站信息的程序或腳本。由于互聯(lián)網(wǎng)數(shù)據(jù)的多樣性和資源的有限性,根據(jù)用戶(hù)需求定向抓取相關(guān)網(wǎng)頁(yè)并分析已成為如今主流的爬取策略。網(wǎng)絡(luò)爬蟲(chóng)并非一項(xiàng)新技術(shù),可以說(shuō)至少有二十年的歷史。隨著當(dāng)下存儲(chǔ)價(jià)格的波動(dòng)、計(jì)算能力的提高、云計(jì)算的發(fā)展,其商業(yè)價(jià)值也會(huì)不斷攀升,這就需要我們對(duì)爬蟲(chóng)技術(shù)加以創(chuàng)新優(yōu)化,再加上互聯(lián)網(wǎng)發(fā)展這么多年有很多數(shù)據(jù)的沉淀,所以在這個(gè)過(guò)程里面,爬蟲(chóng)現(xiàn)在可以被我們更多的人所使用,完成更多的特定行業(yè)的、特定需求的功能。爬蟲(chóng)的本質(zhì)是模擬瀏覽器打開(kāi)網(wǎng)頁(yè),獲取網(wǎng)頁(yè)中我們想要的那部分?jǐn)?shù)據(jù)。

      2.3數(shù)據(jù)可視化

      隨著移動(dòng)終端的廣泛普及,大家不僅僅希望把數(shù)據(jù)存起來(lái),更希望數(shù)據(jù)能被人們理解,這些數(shù)據(jù)可能很抽象,專(zhuān)家才可能看懂里面的規(guī)律。為了更多的決策管理人員能更好地判斷接下來(lái)要發(fā)生的事情,所以數(shù)據(jù)可視化的需求變得很廣泛了。數(shù)據(jù)可視化有折線圖、柱狀圖、餅狀圖、熱力分布圖等等,可以分析增長(zhǎng)的速度、比例、地區(qū)的分布等等,用到了Flask(用于做網(wǎng)站)、Echarts(一個(gè)多種圖表開(kāi)源的框架)、Matplotlib(基于Python的圖表繪圖系統(tǒng))。

      3 算法設(shè)計(jì)

      3.1準(zhǔn)備工作

      3.1.1網(wǎng)頁(yè)基礎(chǔ)信息介紹

      需要用到HTML、CSS、JS的基礎(chǔ)知識(shí)和URL分析,春雨醫(yī)生網(wǎng)站包括600條醫(yī)生信息,分30頁(yè),每頁(yè)20條。每頁(yè)的URL的不同之處是最后的數(shù)值page=page+1;借助F12來(lái)查看網(wǎng)頁(yè)的源代碼,在Elements下找到需要的數(shù)據(jù)位置。點(diǎn)擊Network后,生成對(duì)這個(gè)網(wǎng)站發(fā)起請(qǐng)求的過(guò)程,小的線條為瀏覽器向服務(wù)器放送的請(qǐng)求。刷新該網(wǎng)頁(yè),只要下面的內(nèi)容是我們想要的,就點(diǎn)擊停止,日志將不再記錄,再點(diǎn)擊第一個(gè)請(qǐng)求,也就是從最左邊數(shù)第一個(gè)線條,返回了請(qǐng)求的大小、規(guī)格等,最后點(diǎn)擊該請(qǐng)求,生成了一個(gè)含有頭部消息的頁(yè)面,該頁(yè)面含有請(qǐng)求的路徑Request URL、請(qǐng)求的方式Request Method、狀態(tài)碼Status Code、移動(dòng)端地址Remote Address、返回的頭部Response Headers(我們發(fā)給服務(wù)器的頭部信息,告訴服務(wù)器返回的內(nèi)容,應(yīng)該適配什么樣的條件,而服務(wù)器給的信息在Response里)、用戶(hù)代理User-Agent(獲取瀏覽器信息,表明是什么版本的瀏覽器,并且可以接受什么樣的瀏覽器)、cookie等。

      3.1.2編碼規(guī)范

      1. # coding=utf-8 可以在代碼中包含中文

      2. # if__name__==“__main__”: 用于測(cè)試程序

      3.1.3引入的庫(kù)

      from bs4 import BeautifulSoup? ? ? #網(wǎng)頁(yè)解析

      import re? ? ? ? ? ? ? ? ? ? ? ? #正則表達(dá)式

      import urllib.request,urllib.error? ?#制定URL

      import xlwt? ? ? ? #進(jìn)行excel操作

      import sqlite3? ? ? ? ? ? ? ? ? ? #進(jìn)行SQLite數(shù)據(jù)庫(kù)操作

      import matplotlib.pyplot? ? ?#繪圖

      import seaborn? ? ? ?#matplotilb的子類(lèi),分析熱力圖

      import pandas? ? ? ?#內(nèi)置的一個(gè)類(lèi)dataframe 建立二維矩陣

      (第三方庫(kù)在系統(tǒng)里沒(méi)有需要引入, win鍵+r彈出運(yùn)行窗口,輸入cmd生成黑色框,再輸入pip install +庫(kù)名,即可完成下載安裝。)

      3.2 爬取數(shù)據(jù)

      3.2.1 爬取方法

      首先建立一個(gè)datalist數(shù)組,用于保存獲取到的數(shù)據(jù)。由于春雨醫(yī)生的每頁(yè)都有規(guī)律,只需在網(wǎng)址后邊改頁(yè)數(shù)即可,利用for循環(huán)遍歷所有網(wǎng)頁(yè),這里需注意索引值i是int型,需要強(qiáng)制類(lèi)型轉(zhuǎn)換為str,再調(diào)用askURL函數(shù)保存獲取的源碼。使用BeautifulSoup定位特定的標(biāo)簽位置(用到了html.parser解析器,在用soup.fill_all()按照一定的標(biāo)準(zhǔn)把想要的數(shù)據(jù)一次性查找出來(lái),形成一個(gè)列表),最后使用正則表達(dá)式找到具體內(nèi)容(由于找到的數(shù)據(jù)可能很多,第一個(gè)數(shù)據(jù)才是我們想要找到的,所以在方法后邊加[0])。

      3.2.2 urllib

      Python一般使用urllib2庫(kù)獲取頁(yè)面,對(duì)每一個(gè)頁(yè)面,調(diào)用askURL函數(shù)獲取頁(yè)面內(nèi)容,定義一個(gè)獲取頁(yè)面的函數(shù)askURL,傳入一個(gè)url參數(shù)來(lái)表示網(wǎng)址,打開(kāi)網(wǎng)頁(yè)找到源代碼里的Network中User-Agent,用鍵值對(duì)的方式保存在頭部字典head里(模擬瀏覽器頭部信息,向服務(wù)器發(fā)送消息),接下來(lái)用urllib2.Request生成請(qǐng)求,urllib2.urlopen發(fā)送請(qǐng)求獲取響應(yīng),read獲取頁(yè)面內(nèi)容,當(dāng)然在訪問(wèn)頁(yè)面經(jīng)常會(huì)出現(xiàn)錯(cuò)誤,為了程序正常運(yùn)行,加入異常捕獲try…except…語(yǔ)句。

      def askURL(url):? ? ? ? ? ? #獲取html內(nèi)容的函數(shù)

      head = {

      "user-agent": "Mozilla / 5.0(Windows NT 10.0;Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 88.0.4324.96? Safari / 537.36 Edg / 88.0.705.53"

      #模擬登入

      }

      request=urllib.request.Request(url,headers=head)

      html=""

      try:

      response=urllib.request.urlopen(request)

      html=response.read().decode("utf-8")

      #print(html)

      except urllib.error.URLError as e:

      if hasattr(e,"code"):

      print(e.code)

      if hasattr(e,"reason"):

      print(e.reason)

      return html

      3.2.3正則表達(dá)式

      正則表達(dá)式是對(duì)一種規(guī)格的描述或表達(dá),描述的是一種字符串匹配的模式。簡(jiǎn)而言之,用具備一定特征意義的表達(dá)式對(duì)字符串進(jìn)行檢查,將符合條件的子字符串提取出來(lái)。獲取html字符串后,對(duì)提取的數(shù)據(jù)進(jìn)行特征提取,使用正則表達(dá)式語(yǔ)法進(jìn)行編譯,完成數(shù)據(jù)的提取。就不用將html字符串轉(zhuǎn)換成html文檔或頁(yè)面,然后再用到xpath和bs4再進(jìn)行提取了。

      單字符:點(diǎn)(.)匹配某個(gè)字符串:match(表達(dá)式,匹配對(duì)象)只能匹配某個(gè),從起始位置進(jìn)行匹配并返回的結(jié)果是object; 若匹配不到,不會(huì)報(bào)錯(cuò),返回None。點(diǎn)(.)匹配任意某個(gè)字符,\d匹配任意某個(gè)數(shù)字,\D除了數(shù)字外均可匹配,/s匹配空白字符。

      多字符:星號(hào)(*)匹配零個(gè)或者多個(gè)字符,沒(méi)有星號(hào)就從起始位置進(jìn)行匹配,匹配到第一個(gè);有星號(hào)從起始位置進(jìn)行匹配,匹配[ ]內(nèi)容零次或多次。問(wèn)號(hào)(?)要么匹配0個(gè),要么匹配1個(gè)。{m}匹配指定個(gè)數(shù)都是從起始位置匹配由左到右{m,n}匹配m到n個(gè)。

      需要在函數(shù)外創(chuàng)建正則表達(dá)式對(duì)象,表示規(guī)則(字符串的模式),用到了re.compile()方法,注意字符串的表示用單引號(hào),因?yàn)樵创a中會(huì)有雙引號(hào),這樣不會(huì)對(duì)它造成影響,在字符串前面加r,就不會(huì)把字符串進(jìn)行錯(cuò)誤的解析了。其中獲取的內(nèi)容(.*?)點(diǎn)表示1個(gè)字符、星號(hào)表示0個(gè)或多個(gè)字符。

      findName=re.compile(r'<span class="name">(.*?)</span>')

      #定義正則表達(dá)式規(guī)則,爬取醫(yī)生姓名

      finGrade = re.compile(r'<span class="grade">(.*?)</span>')

      #定義正則表達(dá)式規(guī)則,爬取醫(yī)生級(jí)別

      def getData(beseurl):? ? ?#創(chuàng)建爬取解析數(shù)據(jù)函數(shù)

      datalist=[]? ? ? ? ? #爬取完把數(shù)據(jù)整合進(jìn)datalist數(shù)組

      for i in range(1,31):

      url=beseurl+str(i)

      html=askURL(url)

      soup=BeautifulSoup(html,"html.parser")

      for item in soup.find_all('div',class_="doctor-info-item"):

      # print(item)

      data=[]? ?#把單個(gè)醫(yī)生信息保存在data數(shù)組里

      item=str(item)

      name = re.findall(findName,item)[0] #按規(guī)則選擇第一個(gè)字符串賦值給name

      data.append(name)

      grade= re.findall(finGrade,item)[0]

      data.append(grade)

      datalist.append(data)

      print(datalist)

      return datalist

      3.3 保存數(shù)據(jù)

      保存形式多樣,這里我們利用python庫(kù)xlwt將抽取的數(shù)據(jù)datalist寫(xiě)入Excel表格。如果是保存在當(dāng)前文件夾下“./加名字.xls” ,如果保存在文件系統(tǒng)里“.\\加名字.xls”,以u(píng)tf-8編碼創(chuàng)建一個(gè)Excel對(duì)象,創(chuàng)建一個(gè)Sheet表,再往單元格里寫(xiě)入內(nèi)容,先寫(xiě)列名,再寫(xiě)元素,最后保存表格。

      3.4熱力圖

      熱力圖是數(shù)據(jù)視覺(jué)化的呈現(xiàn),它最典型的是色彩傳遞信息,它可以以最直觀的方式顯示出醫(yī)生的綜合評(píng)分,以不同顏色的區(qū)域?qū)︶t(yī)生評(píng)分進(jìn)行標(biāo)示,顯示醫(yī)生的姓名和評(píng)分,幫助患者快速找到合適的醫(yī)生,提高問(wèn)診質(zhì)量。

      本文采用基于Python的繪圖庫(kù)matplotlib來(lái)實(shí)現(xiàn)熱力圖。

      熱力圖的建立分為三步,第一步對(duì)數(shù)據(jù)預(yù)處理,爬取到的醫(yī)患聊天的醫(yī)生對(duì)話框數(shù)量和患者對(duì)話框數(shù)量之比,加上醫(yī)生的級(jí)別(主任醫(yī)師0.5,副主任醫(yī)師0.3,普通醫(yī)師和主治醫(yī)師0.1)所得的分?jǐn)?shù)為醫(yī)生最后的評(píng)分。第二步為建立矩陣(橫坐標(biāo)為科室容納的最大醫(yī)生人數(shù),縱坐標(biāo)為各個(gè)科室,元素),第三步繪圖(圖2)。

      4 結(jié)束語(yǔ)

      ?爬取大量信息后對(duì)數(shù)據(jù)進(jìn)行分析顯然更適合網(wǎng)絡(luò)信息時(shí)代對(duì)數(shù)據(jù)的處理,能夠更好地實(shí)現(xiàn)信息共享,根據(jù)網(wǎng)民需要提供更有針對(duì)性的信息,使用該技術(shù)進(jìn)行線上就醫(yī),符合國(guó)家“互聯(lián)網(wǎng)+醫(yī)療”的發(fā)展政策,更大程度上節(jié)約了患者時(shí)間成本,不受時(shí)空限制,為患者提供醫(yī)生準(zhǔn)確專(zhuān)業(yè)的信息。不足點(diǎn)在于本次采集的醫(yī)生數(shù)量較少,存在偶然性。此外,對(duì)醫(yī)生推薦時(shí),是單個(gè)患者進(jìn)行推薦,時(shí)間成本較高。

      參考文獻(xiàn):

      [1] 何源.腦電波數(shù)據(jù)傳輸?shù)姆?wù)器設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江工業(yè)大學(xué),2017.

      [2] 陳饒.面向電力行業(yè)的在線商業(yè)智能工具設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2019.

      [3] 孫景雪.基于機(jī)器學(xué)習(xí)的第三方追蹤和反廣告攔截檢測(cè)系統(tǒng)[D].西安:西安電子科技大學(xué),2019.

      [4] 李敏.Edge瀏覽器安全風(fēng)險(xiǎn)與防御技術(shù)研究[D].北京:北京郵電大學(xué),2018.

      [5] 徐玉祥.基于動(dòng)態(tài)自適應(yīng)權(quán)重的個(gè)性化微博推薦系統(tǒng)研究[D].合肥:合肥工業(yè)大學(xué),2017.

      [6] 葉佳鑫,熊回香,蔣武軒.一種融合患者咨詢(xún)文本與決策機(jī)理的醫(yī)生推薦算法[J].數(shù)據(jù)分析與知識(shí)發(fā)現(xiàn),2020,4(Z1):153-164.

      【通聯(lián)編輯:王力】

      收稿日期:2021-04-06

      作者簡(jiǎn)介:崔智博(2000—),男 ,遼寧沈陽(yáng)人,大連外國(guó)語(yǔ)大學(xué)本科生,獲得IBM頒發(fā)的高級(jí)軟件工程師證書(shū),2020年藍(lán)橋杯大賽省賽一等獎(jiǎng)+國(guó)賽優(yōu)秀獎(jiǎng),2020年遼寧省大學(xué)生計(jì)算機(jī)系統(tǒng)與程序設(shè)計(jì)競(jìng)賽二等獎(jiǎng),2019年大學(xué)生創(chuàng)新創(chuàng)業(yè)項(xiàng)目“圖書(shū)館座位有效預(yù)留一體系統(tǒng)”(省級(jí))成員,2021年大創(chuàng)“融合患者咨詢(xún)文本的醫(yī)生推薦算法研究”組長(zhǎng)(正在進(jìn)行),2021年大創(chuàng)“結(jié)合機(jī)器學(xué)習(xí),緩解心理疾病患者病情急性發(fā)作問(wèn)題” 組員(正在進(jìn)行),主要研究方向?yàn)槌绦蛟O(shè)計(jì)。

      3414500589236

      猜你喜歡
      網(wǎng)絡(luò)爬蟲(chóng)數(shù)據(jù)可視化數(shù)據(jù)分析
      大數(shù)據(jù)時(shí)代背景下本科教學(xué)質(zhì)量動(dòng)態(tài)監(jiān)控系統(tǒng)的構(gòu)建
      可視化:新媒體語(yǔ)境下的數(shù)據(jù)、敘事與設(shè)計(jì)研究
      煉鐵廠鐵量網(wǎng)頁(yè)數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      我國(guó)數(shù)據(jù)新聞的發(fā)展困境與策略研究
      科技傳播(2016年19期)2016-12-27 14:53:29
      基于R語(yǔ)言的大數(shù)據(jù)審計(jì)方法研究
      Excel電子表格在財(cái)務(wù)日常工作中的應(yīng)用
      淺析大數(shù)據(jù)時(shí)代背景下的市場(chǎng)營(yíng)銷(xiāo)策略
      新常態(tài)下集團(tuán)公司內(nèi)部審計(jì)工作研究
      淺析大數(shù)據(jù)時(shí)代對(duì)企業(yè)營(yíng)銷(xiāo)模式的影響
      基于社會(huì)網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁(yè)挖掘研究
      盐边县| 大宁县| 新巴尔虎左旗| 阳泉市| 祥云县| 石林| 苍溪县| 阳山县| 湖州市| 大关县| 章丘市| 内丘县| 临武县| 崇信县| 屯留县| 广西| 乐陵市| 新乡市| 宜丰县| 鄂伦春自治旗| 囊谦县| 乐昌市| 高阳县| 吴堡县| 巢湖市| 岑溪市| 阿拉善右旗| 乌兰察布市| 赣州市| 当阳市| 泗阳县| 沭阳县| 中山市| 庆云县| 莆田市| 景宁| 若尔盖县| 剑川县| 北宁市| 泌阳县| 大埔县|