• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 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
    玉田县| 同仁县| 彭阳县| 阿拉善右旗| 安庆市| 平南县| 安龙县| 台前县| 东城区| 亳州市| 瓮安县| 抚远县| 民权县| 天气| 无棣县| 明溪县| 易门县| 巴里| 喀喇沁旗| 慈利县| 沙洋县| 衡山县| 绥阳县| 广德县| 本溪| 丰台区| 靖江市| 泰兴市| 和平县| 吉木乃县| 赞皇县| 灵台县| 天柱县| 自治县| 大悟县| 庄浪县| 万安县| 泸定县| 尚志市| 浦城县| 化州市|