• 
    

    
    

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

      ?

      基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)

      2020-09-11 03:41:56四川水利職業(yè)技術(shù)學(xué)院趙文杰古榮龍
      河北農(nóng)機 2020年8期
      關(guān)鍵詞:解析器爬蟲網(wǎng)頁

      四川水利職業(yè)技術(shù)學(xué)院 趙文杰 古榮龍

      隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展和大數(shù)據(jù)時代的到來,網(wǎng)絡(luò)數(shù)據(jù)呈爆炸式的發(fā)展,如何從海量的數(shù)據(jù)中快速高效地提取用戶感興趣的Web 信息,在大數(shù)據(jù)處理中面臨著巨大的挑戰(zhàn)。雖然目前通過搜索引擎可以滿足日?;镜男枨?,但對特定的內(nèi)容不能進(jìn)行集中處理和可視化展示。另外,手動搜索的效率低,對數(shù)據(jù)選取的時間成本較高。網(wǎng)絡(luò)爬蟲技術(shù)可以很好地解決這種問題,自行定制規(guī)則選取特定內(nèi)容,可以讓我們更精準(zhǔn)地獲取有效數(shù)據(jù)。同時網(wǎng)絡(luò)爬蟲可以根據(jù)網(wǎng)頁內(nèi)容進(jìn)行深度和廣度搜索,實現(xiàn)自動化運行[1]。

      1 爬蟲技術(shù)

      網(wǎng)絡(luò)爬蟲,是按照設(shè)定的規(guī)則自動抓取網(wǎng)絡(luò)信息的程序。網(wǎng)頁中包含了文字信息、超鏈接信息。從功能上來講,爬蟲的處理過程一般包括數(shù)據(jù)采集、處理、儲存三個部分。在網(wǎng)絡(luò)爬蟲的系統(tǒng)框架中,主過程由控制器、解析器、資源庫三部分組成??刂破鞯闹饕ぷ魇秦?fù)責(zé)給多線程中的各個爬蟲線程分配工作任務(wù)。解析器的主要工作是下載網(wǎng)頁,進(jìn)行頁面的處理,主要是將一些JS 腳本標(biāo)簽、CSS 代碼內(nèi)容、空格字符、HTML 標(biāo)簽等內(nèi)容處理掉,爬蟲的基本工作由解析器完成。資源庫用來存放下載到的網(wǎng)頁資源,一般都采用大型的數(shù)據(jù)庫存儲[2]。

      網(wǎng)絡(luò)爬蟲技術(shù)分為以下幾類:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、增量網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲[3]。這幾種爬蟲的關(guān)鍵技術(shù)是類似的。爬蟲獲取網(wǎng)絡(luò)數(shù)據(jù)的方式:模擬瀏覽器發(fā)送請求,獲取網(wǎng)頁代碼——提取有用數(shù)據(jù),解析內(nèi)容,保存數(shù)據(jù)。

      2 Python 簡述

      Python 是一種解釋型、面向?qū)ο?、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。它是解釋型語言,但是也可以編譯成.pyc 跨平臺的字節(jié)碼文件。.pyc 文件有幾個好處:一是可以簡單地隱藏源碼,二是提高載入速度,三是跨平臺。相較于C++、Java 語言,Python 更易于學(xué)習(xí),有一個廣泛的標(biāo)準(zhǔn)庫。同時可以結(jié)合Java 或C/C++語言,封裝成Python 可以調(diào)用的擴展庫,便于擴展和移植。Python 提供了非常豐富的針對網(wǎng)絡(luò)協(xié)議的標(biāo)準(zhǔn)庫,能簡單高效地進(jìn)行網(wǎng)頁抓取、網(wǎng)頁解析、數(shù)據(jù)存儲等,使程序員可以集中精力處理程序邏輯[4]。

      3 爬蟲案例

      本文通過Python 語言來實現(xiàn)一個簡單的聚焦型爬蟲,爬取當(dāng)當(dāng)網(wǎng)上的圖書信息,將圖書的封面圖片,圖書書名、圖書鏈接頁面保存在本地csv 文件中。本文在Python3.6 環(huán)境下調(diào)試完成。

      該系統(tǒng)主要由三個方面構(gòu)成。第一,Url 管理器,負(fù)責(zé)提取網(wǎng)絡(luò)的url 地址。第二,網(wǎng)頁下載器,從網(wǎng)絡(luò)上下載網(wǎng)站內(nèi)容,獲取頁面中詳細(xì)信息;第三,頁面解析器,針對網(wǎng)頁下載器中的信息,提取目標(biāo)信息;第四,數(shù)據(jù)存儲器,完成數(shù)據(jù)持久化。

      具體實現(xiàn)過程如下:

      (1)打開當(dāng)當(dāng)網(wǎng)頁面,搜索關(guān)鍵字“Python”,結(jié)果如圖1 所示。

      圖1 搜索結(jié)果圖

      (2)分析源代碼,可利用開發(fā)者工具查看每個數(shù)據(jù)對應(yīng)的元素及class 名稱,如圖2 所示。

      圖2 網(wǎng)頁源代碼

      (3)對網(wǎng)頁進(jìn)行解析,可以使用正則表達(dá)式、BeautifulSoup、lxml 等多種方式來解析網(wǎng)頁,每種方法各有特色,使用時結(jié)合實際需要選擇一種適合的解析方法。

      #導(dǎo)入程序需要的庫

      import urllib.request

      import time

      import csv

      import codecs

      from bs4 import BeautifulSoup

      #打開網(wǎng)頁,輸入關(guān)鍵字”python”

      圖3 保存在csv 文件中的數(shù)據(jù)

      #爬取地址,當(dāng)當(dāng)Python 的書籍太多,我們只爬取前20 頁的信息

      url="http://search.dangdang.com/?key=python&act=input&s how=big&page_index="

      #請求頭

      headers={'

      User-Agent':'Mozilla/5.0 (Windows NT 6.1;Win64;x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'

      }

      index=1

      while index<=20:

      #發(fā)起請求

      request = urllib.request.Request (url=url+str (index),headers=headers)

      response=urllib.request.urlopen(request)

      index=index+1

      #通過BeautifulSoup 的find_all 方法解析頁面

      soup=BeautifulSoup(response)

      temps=soup.find_all('a',class_='pic')

      global books

      books=books+temps

      (4)數(shù)據(jù)持久化,將爬取的數(shù)據(jù)保留在本地。數(shù)據(jù)存儲的方式方法有多種,可以保留在普通文件中,如txt、csv 等。也可以存儲在數(shù)據(jù)庫中,如MySQL。本文將爬取到的數(shù)據(jù)寫入csv 文件,結(jié)果如圖3 所示。代碼如下:

      file_name='PythonBook.csv'

      #指定編碼為utf-8,避免寫csv 文件出現(xiàn)中文亂碼

      with codecs.open(file_name,'w','utf-8')as csvfile:

      filednames=['書名','頁面地址','圖片地址']

      writer=csv.DictWriter(csvfile,fieldnames=filednames)

      writer.writeheader()

      for book in books:

      if len(list(book.children)[0].attrs)==3:

      img=list(book.children)[0].attrs['data-original']

      else:

      img=list(book.children)[0].attrs['src']

      try:

      writer.writerow({' 書名':book.attrs['title'], ' 頁面地址':book.attrs['href'],'圖片地址':img})

      except UnicodeEncodeError:

      print("編碼錯誤,該數(shù)據(jù)無法寫到文件中")

      4 結(jié)語

      本文介紹了基于Python 的網(wǎng)絡(luò)爬蟲技術(shù)的工作流程,以實際案例演示了當(dāng)當(dāng)網(wǎng)數(shù)據(jù)的爬取過程?,F(xiàn)在已經(jīng)進(jìn)入大數(shù)據(jù)時代,網(wǎng)絡(luò)爬蟲技術(shù)具有極高的實際應(yīng)用價值,作為一種自動收集數(shù)據(jù)的手段,在各行各業(yè)都有廣泛的應(yīng)用。同時也能為后續(xù)數(shù)據(jù)處理、數(shù)據(jù)分析做好準(zhǔn)備。

      猜你喜歡
      解析器爬蟲網(wǎng)頁
      利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
      基于多解析器的域名隱私保護(hù)機制
      基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
      基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實現(xiàn)
      如何防御DNS陷阱?常用3種DNS欺騙手法
      基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計
      電子制作(2018年10期)2018-08-04 03:24:38
      利用爬蟲技術(shù)的Geo-Gnutel la VANET流量采集
      電子測試(2018年1期)2018-04-18 11:53:04
      一種基于無關(guān)DNS的通信隱私保護(hù)技術(shù)研究
      電子世界(2018年14期)2018-04-15 16:14:25
      基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
      電子制作(2017年2期)2017-05-17 03:54:56
      大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲技術(shù)
      電子制作(2017年9期)2017-04-17 03:00:46
      珲春市| 富顺县| 蓬溪县| 大洼县| 多伦县| 安溪县| 紫阳县| 玉龙| 耒阳市| 日土县| 兴安县| 长子县| 娄底市| 普兰县| 全州县| 苏尼特左旗| 石景山区| 东至县| 新巴尔虎右旗| 小金县| 宾川县| 高要市| 古浪县| 尖扎县| 云阳县| 黄梅县| 邵阳市| 台前县| 阿城市| 临武县| 岳普湖县| 祁门县| 茌平县| 万年县| 仙居县| 高台县| 水富县| 商南县| 巴彦县| 铅山县| 米脂县|