• 
    

    
    

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

      基于Python的一網(wǎng)通辦網(wǎng)公開(kāi)數(shù)據(jù)爬取與實(shí)現(xiàn)

      2019-10-12 20:05:21丁曉陽(yáng)王蘭成
      科學(xué)與財(cái)富 2019年26期
      關(guān)鍵詞:爬蟲(chóng)

      丁曉陽(yáng) 王蘭成

      摘 要:目的:上海一網(wǎng)通辦網(wǎng)作為典型的政府線上辦公與數(shù)據(jù)公開(kāi)網(wǎng)站,其設(shè)計(jì)具有廣泛的代表性,本文通過(guò)研究與實(shí)際測(cè)試,實(shí)現(xiàn)了全站數(shù)據(jù)的抓取,為其他網(wǎng)站的數(shù)據(jù)爬取提供參考,為公共網(wǎng)絡(luò)的大數(shù)據(jù)分析奠定基礎(chǔ)。方法:通過(guò)谷歌瀏覽器查看對(duì)應(yīng)網(wǎng)站的消息請(qǐng)求頭和網(wǎng)頁(yè)源碼;將網(wǎng)站所有網(wǎng)頁(yè)中的數(shù)據(jù)分為A類(網(wǎng)頁(yè)數(shù)據(jù)直接獲取類)和B類(網(wǎng)頁(yè)數(shù)據(jù)異步獲取類)。利用Python調(diào)用re、request和lxml等內(nèi)置庫(kù)與第三方庫(kù),模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求,對(duì)服務(wù)器返回的html和Json等格式的數(shù)據(jù)進(jìn)行解析,對(duì)于異步傳輸?shù)臄?shù)據(jù)需要在瀏覽器中找到對(duì)應(yīng)的json文件,再次查看消息頭并發(fā)送請(qǐng)求獲取異步數(shù)據(jù),過(guò)濾出目標(biāo)數(shù)據(jù),最后寫(xiě)入到CSV格式的文本中。結(jié)果:經(jīng)過(guò)研究與測(cè)試,爬蟲(chóng)成功爬取上海一網(wǎng)通辦網(wǎng)上所有數(shù)據(jù),爬取效率較高,爬取數(shù)據(jù)具有非常高的準(zhǔn)確性;其中數(shù)據(jù)爬取的難點(diǎn)在于定位異步請(qǐng)求數(shù)據(jù)的文件和模擬瀏覽器請(qǐng)求異步數(shù)據(jù)。

      關(guān)鍵詞:公開(kāi)情報(bào);情報(bào)獲取Python;爬蟲(chóng);數(shù)據(jù)爬取

      引言

      美國(guó)中央情報(bào)局前局長(zhǎng)希倫科特曾指出:“ 大多數(shù)公開(kāi)情報(bào)來(lái)源于諸如外國(guó)書(shū)刊、科技調(diào)查報(bào)告、圖片、商業(yè)分析報(bào)告、報(bào)紙和新聞廣播,以及精通國(guó)際關(guān)系的人提供的綜合性看法之類的普遍渠道”。【[1]樊合成,陳樹(shù)寧,王守宏.試論公開(kāi)情報(bào)研究[J]. 現(xiàn)代情報(bào),2004,01:52-54.】 如今,大多的情報(bào)存在于網(wǎng)絡(luò)中,對(duì)網(wǎng)絡(luò)上大量的公開(kāi)數(shù)據(jù)進(jìn)行爬取與分析會(huì)產(chǎn)生巨大的價(jià)值,這同樣對(duì)于獲取信息優(yōu)勢(shì)至關(guān)重要。而作為計(jì)算機(jī)與互聯(lián)網(wǎng)融合孕育而生的大數(shù)據(jù)已不再只停留于IT行業(yè),而是被廣泛應(yīng)用于各個(gè)領(lǐng)域,美國(guó)率先將大數(shù)據(jù)上升為國(guó)家戰(zhàn)略并將其定義為“未來(lái)的新石油”。【[2]許陽(yáng),王程程.大數(shù)據(jù)推進(jìn)政府治理能力現(xiàn)代化:研究熱點(diǎn)與發(fā)展趨勢(shì)[J]. 電子政務(wù),2018,11:101-112.】我國(guó)在網(wǎng)絡(luò)大數(shù)據(jù)應(yīng)用方面的起步較晚,網(wǎng)絡(luò)公開(kāi)數(shù)據(jù)的爬取、分析與利用不夠充分。本文利用典型的政府線上辦公網(wǎng):上海一網(wǎng)通辦,實(shí)現(xiàn)對(duì)網(wǎng)站數(shù)據(jù)全部精準(zhǔn)抓取,為其他公共網(wǎng)絡(luò)的數(shù)據(jù)爬取提供支持與參考。本文所提供的爬取方法具有較高通用性,可以支持其他一般性網(wǎng)頁(yè)的數(shù)據(jù)爬取。

      1 工具介紹

      為了簡(jiǎn)單、輕便的編寫(xiě)腳本,本文所涉及的爬蟲(chóng)未利用其他集成開(kāi)發(fā)環(huán)境,而是選擇的Python的官方開(kāi)發(fā)工具IDLE。在爬蟲(chóng)編寫(xiě)過(guò)程中共涉及8個(gè)內(nèi)置和第三方庫(kù)分別為:os、 sys、time、re、json、requests、chardet和lxml。其中requests庫(kù)用于模擬瀏覽器向服務(wù)器發(fā)送請(qǐng)求;chardet用于檢測(cè)數(shù)據(jù)編碼格式,以便用對(duì)數(shù)據(jù)進(jìn)行解析;lxml庫(kù)用于高效解析HTML和XML文件,支持XPath解析方式。數(shù)據(jù)存儲(chǔ)選擇的是通用的CSV格式,主要是方便以后導(dǎo)入各類數(shù)據(jù)庫(kù)或者直接進(jìn)行Excel編輯。

      2 爬蟲(chóng)實(shí)現(xiàn)

      編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)是從互聯(lián)網(wǎng)上獲取數(shù)據(jù)的重要方式,通常一個(gè)網(wǎng)頁(yè)的數(shù)據(jù)需要瀏覽器發(fā)送多次請(qǐng)求以獲取不同類型的數(shù)據(jù),例如,上海一網(wǎng)通辦主頁(yè)于2019年7月8日請(qǐng)求網(wǎng)頁(yè)內(nèi)容共發(fā)送88個(gè)請(qǐng)求。如果需要爬取的數(shù)據(jù)屬于網(wǎng)頁(yè)中的A類數(shù)據(jù),那么此類數(shù)據(jù)在網(wǎng)頁(yè)中直接獲取,這類數(shù)據(jù)是網(wǎng)頁(yè)中數(shù)據(jù)存在的普遍形式,爬取時(shí)的操作也相對(duì)比較簡(jiǎn)單。如果需要爬取的數(shù)據(jù)屬于網(wǎng)頁(yè)中的B類數(shù)據(jù),此類數(shù)據(jù)通常需要執(zhí)行網(wǎng)頁(yè)中的JavaScript代碼才能獲取,也就是需要再次發(fā)送數(shù)據(jù)請(qǐng)求,此類數(shù)據(jù)獲取相對(duì)比較難。本文分別就A類和B類兩類數(shù)據(jù),從一網(wǎng)通辦網(wǎng)站上分別選?。菏形I(lǐng)導(dǎo)信箱和戶籍辦理兩個(gè)典型的模塊進(jìn)行分析和說(shuō)明。

      2.1 市委領(lǐng)導(dǎo)信箱爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)

      市委領(lǐng)導(dǎo)信箱公開(kāi)數(shù)據(jù)爬取設(shè)計(jì)流程大致為:第一,獲取郵件列表目錄所在的網(wǎng)頁(yè)數(shù)據(jù),利用chatdet庫(kù)分析網(wǎng)頁(yè)編碼格式并解析數(shù)據(jù),從中爬取每個(gè)郵件的網(wǎng)絡(luò)地址并發(fā)送請(qǐng)求。第二,從目錄首頁(yè)獲取爬取的總頁(yè)碼。第三,分析每一個(gè)郵件目錄頁(yè)的網(wǎng)址規(guī)則,自動(dòng)翻頁(yè),遍歷每頁(yè)郵件目錄頁(yè),并向每一個(gè)郵件網(wǎng)絡(luò)地址發(fā)送請(qǐng)求并爬取郵件內(nèi)容。第四,清洗郵件內(nèi)容并寫(xiě)入CSV文件。

      以下是該模塊爬蟲(chóng)實(shí)現(xiàn)的源代碼:

      (已隱去導(dǎo)入庫(kù)代碼)

      #step1:獲取郵件列表目錄所在的網(wǎng)頁(yè)數(shù)據(jù)

      r = requests.get('http://wsxf.sh.gov.cn/xf_swldxx/feedback_list.aspx?PageName=hfxd')#獲取信箱目錄列表網(wǎng)頁(yè)數(shù)據(jù)

      page_number = 0? ?#新建預(yù)存信箱列表頁(yè)數(shù)的全局變量

      dirpath = '一網(wǎng)通辦'+ time.strftime("%Y-%m-%d", time.localtime())#預(yù)存數(shù)據(jù)文件保存路徑

      if not os.path.exists(dirpath): #確認(rèn)文件保存路徑是否存在,如果不存在就新建相應(yīng)路徑

      os.mkdir(dirpath)

      def grabble_mail(r):#定義爬取每一個(gè)目錄頁(yè)的爬蟲(chóng)函數(shù)

      global dirpath

      try:

      r.raise_for_status()? ?#確認(rèn)請(qǐng)求是否相應(yīng)正常

      print('爬取正常')

      except:

      print('錯(cuò)誤狀態(tài)碼:'+ str(r.status_code))

      #利用chatdet庫(kù)分析網(wǎng)頁(yè)編碼格式,并解析數(shù)據(jù)

      charinfo = chardet.detect(r.content)? #分析網(wǎng)頁(yè)的編碼格式

      print('目標(biāo)網(wǎng)頁(yè) 編碼信息:')

      print(charinfo)

      r_text = r.content.decode(charinfo['encoding'],errors='ignore')? #用分析得到的編碼格式解析數(shù)據(jù)

      cl_text = r_text.replace('\n','')? #數(shù)據(jù)清理去掉數(shù)據(jù)中的回車符號(hào)

      r_tree = etree.HTML(r_text)? ?#利用lxml中的etree庫(kù)解析html文件

      #step2:確定郵件目錄頁(yè)總頁(yè)數(shù)

      if not re.findall('\d+',r.url):#通過(guò)首頁(yè)數(shù)據(jù)中的“共幾頁(yè)”確定總爬取頁(yè)數(shù)

      global page_number

      page_number = int(re.findall('第\d+頁(yè) 共(\d+)頁(yè) 共\d+條',r_tree.xpath('//*[@id="main"]/tbody/tr/td[2]/div//text()')[5])[0])

      print('共有'+ str(page_number)+ '個(gè)目錄頁(yè)')

      #step3:爬取每一頁(yè)中的每一個(gè)郵件網(wǎng)絡(luò)地址并再次訪問(wèn)每一個(gè)網(wǎng)絡(luò)地址爬取郵件內(nèi)容

      a_taglist = r_tree.xpath('//*[@id="FBList"]/tbody//a')#爬取郵件目錄列表中每個(gè)郵件的網(wǎng)絡(luò)地址

      try:

      for a in range(len(a_taglist)):

      try:

      sub_r = requests.get('http://wsxf.sh.gov.cn/xf_swldxx/' + a_taglist[a].attrib["href"])

      sub_charinfo = chardet.detect(sub_r.content)

      print('爬?。?+ a_taglist[a].attrib["href"])

      sub_r_text = sub_r.content.decode(sub_charinfo['encoding'], errors='ignore')

      sub_cl_text = sub_r_text.replace('\r', '')

      sub_r_tree = etree.HTML(sub_cl_text)

      sub_title = sub_r_tree.xpath('//*[@id="MainContent_LaTitle"]//text()')[0]

      sub_date = sub_r_tree.xpath('//*[@id="MainContent_LaDate"]//text()')[0]

      sub_content = sub_r_tree.xpath('//*[@id="MainContent_LaContent"]//text()')[0]

      sub_pbdate =? sub_r_tree.xpath('//*[@id="MainContent_LaHFDate"]//text()')[0]

      sub_departm = sub_r_tree.xpath('//*[@id="MainContent_LaDeptment"]//text()')[0]

      sub_disposition = sub_r_tree.xpath('//*[@id="MainContent_LaDisposition"]//text()')[0]

      #step4:把郵件內(nèi)容清除掉回車和逗號(hào)之后寫(xiě)入csv文件,因?yàn)榛剀嚭投禾?hào)會(huì)影響CSV結(jié)構(gòu)

      with open(dirpath + '/' + '市委領(lǐng)導(dǎo)信箱' + '-' + time.strftime("%Y-%m-%d", time.localtime()) + '.csv', 'a+') as f:

      f.write(sub_title.replace('\n', '').replace(',','').strip())

      f.write(',')

      f.write(sub_date.replace('\n', '').replace(',','').strip() )

      f.write(',')

      f.write(sub_content.replace('\n', '').replace(',','').strip() )

      f.write(',')

      f.write(sub_pbdate.replace('\n', '').replace(',','').strip() )

      f.write(',')

      f.write(sub_departm.replace('\n', '').replace(',','').strip() )

      f.write(',')

      f.write(sub_disposition.replace('\n', '').replace(',','').strip() )

      f.write('\n')

      except:

      print('錯(cuò)誤子鏈接')

      continue

      except:

      print('錯(cuò)誤鏈接')

      grabble_mail(r) #真實(shí)執(zhí)行爬取首頁(yè)中每一個(gè)郵件的內(nèi)容

      #step3:分析每一個(gè)郵件目錄頁(yè)的網(wǎng)址規(guī)則,自動(dòng)翻頁(yè),爬取所有頁(yè)面中郵件內(nèi)容

      jr = requests.get(page_url,headers = headers)

      charinfo = chardet.detect(jr.content)

      jr_text = jr.content.decode(charinfo['encoding'], errors='ignore')

      #step3:利用json庫(kù)解析數(shù)據(jù)保存為Python字典格式

      pyjs = json.loads(jr_text)

      3 測(cè)試與評(píng)價(jià)

      對(duì)本文實(shí)現(xiàn)的爬蟲(chóng)進(jìn)行爬取效率和準(zhǔn)確率測(cè)試,爬蟲(chóng)運(yùn)行的環(huán)境參數(shù)為:Windows10 專業(yè)版操作系統(tǒng),Intel(R) Core(TM) i3 CPU M 350 @2.27GHz處理器,4.00GB RAM,網(wǎng)絡(luò)為第四代移動(dòng)通信技術(shù)。爬取市委領(lǐng)導(dǎo)信箱27頁(yè)共524封信件用時(shí)519.89秒,數(shù)據(jù)準(zhǔn)確率為100%,因?yàn)榫W(wǎng)站的信件結(jié)構(gòu)規(guī)范,無(wú)噪音數(shù)據(jù)。戶籍信息的數(shù)據(jù)量少爬取用時(shí)5.25秒,數(shù)據(jù)準(zhǔn)確率為100%。

      從實(shí)際測(cè)試結(jié)果看,爬蟲(chóng)的效率較高,每封信件的爬取用時(shí)保持在1秒以內(nèi),數(shù)據(jù)爬取的準(zhǔn)確率極高,該爬蟲(chóng)的實(shí)用性高。

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

      本文所設(shè)計(jì)與實(shí)現(xiàn)的爬蟲(chóng)具有通用性,對(duì)于一般性網(wǎng)站公開(kāi)數(shù)據(jù)的爬取具有很好的借鑒意義。其主要有以下幾個(gè)特點(diǎn):

      (1)爬蟲(chóng)的代碼簡(jiǎn)潔、輕巧,設(shè)計(jì)思路清晰直觀

      (2)爬蟲(chóng)的爬取策略適用性強(qiáng),對(duì)于一般網(wǎng)站的公開(kāi)數(shù)據(jù)爬取有較強(qiáng)借鑒意義

      (3)自動(dòng)化程度高,自動(dòng)翻頁(yè)遍歷訪問(wèn)所有二級(jí)鏈接爬取數(shù)據(jù)

      (4)爬取效率與準(zhǔn)確率較高,為下一步數(shù)據(jù)分析奠定良好基礎(chǔ)

      參考文獻(xiàn):

      [1]樊合成,陳樹(shù)寧,王守宏.試論公開(kāi)情報(bào)研究[J]. 現(xiàn)代情報(bào),2004,01:52-54.

      [2]許陽(yáng),王程程.大數(shù)據(jù)推進(jìn)政府治理能力現(xiàn)代化:研究熱點(diǎn)與發(fā)展趨勢(shì)[J].電子政務(wù),2018,11:101-112.

      [3]李培.基于Python的網(wǎng)絡(luò)爬蟲(chóng)與反爬蟲(chóng)技術(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2019(06):1415-1496.

      [4]曾泓竣,曾千容.探析數(shù)據(jù)爬取中的相關(guān)知識(shí)產(chǎn)權(quán)問(wèn)題[J].法制博覽,2019(17):225.

      [5]S. R. Mani Sekhar,G. M. Siddesh,Sunilkumar S. Manvi,K. G. Srinivasa.Optimized Focused Web Crawler with Natural Language Processing Based Relevance Measure in Bioinformatics Web Sources[J].Cybernetics and Information Technologies,2019,19(2).

      [6]Anonymous.Tiger sheds cables with battery-operated rack crawler[J].Concrete Products,2019,122(6).

      [7]胡俊瀟,陳國(guó)偉.網(wǎng)絡(luò)爬蟲(chóng)反爬策略研究[J].科技創(chuàng)新與應(yīng)用,2019(15):137-138+140.

      作者簡(jiǎn)介:

      丁曉陽(yáng)(1990-),男,國(guó)防大學(xué)政治學(xué)院研究生,主要研究方向:網(wǎng)絡(luò)輿情。

      王蘭成(1962-),男,國(guó)防大學(xué)知名教授,博士生導(dǎo)師,主要研究方向:網(wǎng)絡(luò)輿情,圖書(shū)情報(bào)與檔案管理。

      猜你喜歡
      爬蟲(chóng)
      利用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)驗(yàn)證房地產(chǎn)灰犀牛之說(shuō)
      基于Python的網(wǎng)絡(luò)爬蟲(chóng)和反爬蟲(chóng)技術(shù)研究
      善用網(wǎng)絡(luò)爬蟲(chóng)
      基于Django 的分布式爬蟲(chóng)框架設(shè)計(jì)與實(shí)現(xiàn)*
      目前互聯(lián)網(wǎng)中的網(wǎng)絡(luò)爬蟲(chóng)的原理和影響
      網(wǎng)絡(luò)爬蟲(chóng)技術(shù)原理
      誰(shuí)搶走了低價(jià)機(jī)票
      利用爬蟲(chóng)技術(shù)的Geo-Gnutel la VANET流量采集
      大數(shù)據(jù)背景下校園輿情的爬蟲(chóng)應(yīng)用研究
      電子制作(2018年2期)2018-04-18 07:13:42
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      黑龙江省| 普陀区| 普格县| 临城县| 塘沽区| 天柱县| 兴文县| 汉沽区| 瓮安县| 天津市| 华安县| 富民县| 德江县| 太保市| 庆元县| 临沧市| 崇仁县| 纳雍县| 南华县| 慈溪市| 安化县| 蓬溪县| 贵州省| 康定县| 措勤县| 黔西县| 忻州市| 西青区| 福鼎市| 胶州市| 东阳市| 浙江省| 正蓝旗| 芷江| 扎囊县| 开江县| 海阳市| 黑龙江省| 津市市| 太原市| 黄平县|