亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于逆向技術(shù)的深層網(wǎng)絡(luò)爬蟲與數(shù)據(jù)分析

        2023-12-06 11:33:52邢羽琪
        軟件工程 2023年12期
        關(guān)鍵詞:爬蟲逆向網(wǎng)頁

        邢羽琪, 楊 檉

        (云南民族大學數(shù)學與計算機科學學院, 云南 昆明 650500)

        0 引言(Introduction)

        互聯(lián)網(wǎng)經(jīng)濟時代,數(shù)據(jù)既是基礎(chǔ)性資源也是戰(zhàn)略性資源,更是重要的生產(chǎn)力,對各行各業(yè)的發(fā)展都有著重要影響[1]。在大數(shù)據(jù)架構(gòu)中,網(wǎng)絡(luò)爬蟲技術(shù)作為數(shù)據(jù)獲取的重要技術(shù)近年來得以快速發(fā)展。另一方面,Ajax(Asynchronous Javascript And XML,異步的JavaScript和XML)技術(shù)在Web站點中的使用卻增加了數(shù)據(jù)采集的難度。Ajax可以實現(xiàn)瀏覽器與服務(wù)器的異步通信,提升Web站點的響應(yīng)能力。XML是一種描述、存儲、傳輸數(shù)據(jù)的標記語言。Ajax通過使用XMLHttpRequest對象從服務(wù)器異步請求數(shù)據(jù),并將響應(yīng)數(shù)據(jù)以XML格式返回。Ajax技術(shù)可以在不刷新整個頁面的情況下更新局部內(nèi)容,許多網(wǎng)站采用了動態(tài)生成頁面內(nèi)容的方式。這使得爬取網(wǎng)頁變得更復(fù)雜,網(wǎng)頁中的內(nèi)容可能在用戶與頁面交互過程中動態(tài)加載或改變。爬蟲需要解析JavaScript代碼,并模擬用戶與頁面的交互過程,以獲取最終的完整內(nèi)容。

        如今,大部分Web站點都采用Ajax動態(tài)請求、異步刷新方式生成數(shù)據(jù),使得采取Python爬蟲爬取靜態(tài)網(wǎng)頁的方法難以直接提取動態(tài)網(wǎng)頁數(shù)據(jù)[2-3]。本文在前人研究方法的基礎(chǔ)上,依據(jù)靜態(tài)網(wǎng)址信息構(gòu)造動態(tài)請求鏈接,以爬取某購物網(wǎng)站評論數(shù)據(jù)的過程為例,詳細描述了構(gòu)造動態(tài)網(wǎng)頁URL的全過程,可為Ajax動態(tài)數(shù)據(jù)采集技術(shù)的研究提供參考。

        1 JS逆向(JS reverse)

        JavaScript(通??s寫為JS)是一種高級、解釋型的編程語言,它的解釋器被稱為JavaScript引擎,是瀏覽器的一部分,廣泛用于HTML網(wǎng)頁,增強了網(wǎng)頁的互動性。通過對JavaScript源代碼進行混淆加密,既可以做到網(wǎng)頁打開的速度和加密前相差不大,又可以做到加密結(jié)果不可逆,提高數(shù)據(jù)的安全性。但是,對于爬蟲技術(shù)而言,JS加密的應(yīng)用會成為影響數(shù)據(jù)分析人員采集數(shù)據(jù)的瓶頸。當前,JS逆向技術(shù)是應(yīng)對以上瓶頸的有效措施[4]。JS逆向技術(shù)實質(zhì)上是根據(jù)結(jié)果向前推導(dǎo),分析構(gòu)造URL所需的參數(shù),找出后臺參數(shù)生成原理(即參數(shù)加密過程),動態(tài)模擬瀏覽器JS生成結(jié)果,并最終獲取目標數(shù)據(jù)的過程。實施JS逆向技術(shù)的難點是需要在被改寫的源代碼中破解加密算法、拆解相關(guān)參數(shù)?;诖?本文以某購物網(wǎng)站商品評論頁面為例,采用JS逆向技術(shù),使用Python程序還原參數(shù)加密過程,構(gòu)造完整目標網(wǎng)頁的URL信息,實現(xiàn)Python環(huán)境下的JS逆向技術(shù)爬取商品評論數(shù)據(jù),同時進行簡單的數(shù)據(jù)挖掘,使整個數(shù)據(jù)分析過程完整。

        2 評論爬取過程分析(Analysis of comment crawling process)

        爬蟲可以分為搜索引擎網(wǎng)絡(luò)爬蟲、基于Agent的網(wǎng)絡(luò)爬蟲、遷移的網(wǎng)絡(luò)爬蟲、通用網(wǎng)絡(luò)爬蟲和聚焦爬蟲等[5]。根據(jù)要爬取的Web頁面的存在方式,又可將爬蟲分為表層網(wǎng)絡(luò)爬蟲和深層網(wǎng)絡(luò)爬蟲。表層網(wǎng)絡(luò)爬蟲通常用于爬取以表層網(wǎng)頁(即靜態(tài)網(wǎng)頁)為主的Web站點。本文的目標購物網(wǎng)站需要用戶登錄、提交關(guān)鍵詞才能動態(tài)生成相應(yīng)頁面,是典型的由深層網(wǎng)頁構(gòu)成的網(wǎng)站,需要使用深層網(wǎng)絡(luò)爬蟲技術(shù),動態(tài)構(gòu)造URL請求信息,才能批量爬取指定數(shù)量的商品評論信息?;赑ython的JS逆向技術(shù)爬蟲算法流程圖如圖1所示。

        圖1 基于Python的JS逆向技術(shù)爬蟲算法流程圖Fig.1 Flow chart of Python-based JS reverse technology crawler algorithm

        2.1 構(gòu)造URL

        2.1.1 查看URL構(gòu)成

        靜態(tài)網(wǎng)頁是指不應(yīng)用程序而直接或間接制作成HTML的網(wǎng)頁,每一個頁面都有一個固定的URL地址,可以使用Python代碼直接獲取網(wǎng)頁的URL和相應(yīng)的HTML信息。動態(tài)網(wǎng)頁一般使用腳本語言(PHP、ASP等)將網(wǎng)站內(nèi)容存儲于數(shù)據(jù)庫中,由于Python無法直接獲取URL動態(tài)鏈接,因此爬取內(nèi)容時需要動態(tài)構(gòu)造URL鏈接。

        在某購物網(wǎng)站商品評論頁面,利用F12開發(fā)者工具,選擇Network模塊,再篩選XHR請求,刷新網(wǎng)頁并不斷下拉頁,使開發(fā)者工具可以抓取到多個動態(tài)Ajax請求,選中其中一個重點查看URL的請求頭(圖2)。

        圖2 獲取動態(tài)Ajax請求并查看URLFig.2 Obtaining dynamic Ajax requests and viewing URLs

        2.1.2 確定請求頭中的加密參數(shù)

        在動態(tài)URL構(gòu)造過程中,URL參數(shù)的變化信息一般可以在相關(guān)靜態(tài)URL及源代碼中尋找。通過多次請求分析,利用靜態(tài)的URL地址的變化構(gòu)造動態(tài)鏈接,從而實現(xiàn)數(shù)據(jù)采集程序自動對動態(tài)網(wǎng)頁的爬取。

        對比多個頁面URL內(nèi)容,最終確定“t”“sign”“data”三個動態(tài)變化且對采集有效的參數(shù),觀察多次請求的返回結(jié)果,發(fā)現(xiàn)參數(shù)“t”為13位時間戳,“sign”為加密參數(shù),“data”為商品查詢參數(shù)。由此,進入本研究的難點環(huán)節(jié),即逆向破解參數(shù)的加密方式以及構(gòu)造動態(tài)URL。多個頁面URL參數(shù)對比內(nèi)容如圖3所示。

        2.1.3 推導(dǎo)參數(shù)“sign”加密方式

        推導(dǎo)參數(shù)“sign”的加密方式,具體步驟如下。

        步驟1:在控制臺中使用length()函數(shù)查看參數(shù)“sign”的長度,結(jié)果顯示32位,由此初步推測該網(wǎng)站采用MD5加密算法。

        步驟2:使用全局搜索查找“sign”,返回21條相關(guān)數(shù)據(jù),發(fā)現(xiàn)返回的js文件中多次出現(xiàn)了“sign”,經(jīng)逐一排查,排除若干干擾項,最終在mtop.js文件中追溯到參數(shù)“sign”。

        步驟3:查看mtop.js文件的源代碼,從中篩選出純參數(shù)數(shù)據(jù),在其位置打上斷點并進行編譯。斷點查看參數(shù)“sign”加密方式如圖4所示。

        步驟4:查看運行過程得知,構(gòu)成參數(shù)“sign”的信息包括參數(shù)“i”“d.token”“g”“c.data”和函數(shù)“h”,對其逐一分析發(fā)現(xiàn)。參數(shù)“i”為實時生成的13位時間戳信息;參數(shù)“g”由“||”語法得出,“c”是參數(shù)對象,因此“g”為請求頭中的appKey,是一個定值;參數(shù)“c.data”與參數(shù)“g”同理,也是參數(shù)對象的“data”字段;參數(shù)“d.token”是放在cookie信息中的m_h5_tk值。對于函數(shù)“h”,前文已根據(jù)加密結(jié)果為32位信息推測該網(wǎng)站使用的是MD5加密算法,現(xiàn)將上述內(nèi)容拼接的原始參數(shù)使用MD5在線加密器計算結(jié)果,同時使用斷點測試程序查看加密后的結(jié)果,對比兩者發(fā)現(xiàn)結(jié)果一致,驗證了之前函數(shù)“h”為MD5加密函數(shù)的推測。對比函數(shù)“h”與MD5在線加密器結(jié)果如圖5所示。

        圖5 對比函數(shù)“h”與MD5在線加密器結(jié)果Fig.5 Online encryptor results comparison of “h” function and MD5

        步驟5:根據(jù)斷點運行過程,逐步查看各參數(shù)構(gòu)成方式,據(jù)此拼接完整的參數(shù)“sign”。

        2.1.4 模擬生成URL

        分析URL的構(gòu)成,使用Python編寫程序,具體為自定義時間戳和隨機數(shù),生成并拼接“t”“sign”“data”參數(shù),構(gòu)造完整的URL信息,對整個訪問請求進行模擬并獲得響應(yīng)。將上述參數(shù)拼接成完整的URL,用requests的get/post方法發(fā)送請求并接收數(shù)據(jù)res=requests.get(url=url,headers=headers).content,返回得到JSON格式數(shù)據(jù)。

        2.2 數(shù)據(jù)提取

        JSON作為一種輕量級的數(shù)據(jù)交換格式,結(jié)構(gòu)簡單緊湊,是互聯(lián)網(wǎng)上常用的數(shù)據(jù)傳輸與交換格式。JSON有兩種結(jié)構(gòu)形式,一是鍵值對形式,以“{”開始,以“}”結(jié)束,中間部分由0個或者多個“,”分隔的鍵值對構(gòu)成,是一個無序的“‘名稱/值’對”集合;二是數(shù)組形式,以“[”開始,以“]”結(jié)束,是一個值的有序集合。本次爬取返回的結(jié)果是以上兩種情況的嵌套,需要通過分析找到所需數(shù)據(jù)所在層次,即res[′data′][′module′][′reviewVOList′]。之后,可利用Python爬蟲解析庫逐條分別提取評論用戶、商品詳情、評論時間及評論內(nèi)容等信息。評論頁面JSON代碼的嵌套關(guān)系如圖6所示。

        圖6 評論頁面JSON代碼的嵌套關(guān)系Fig.6 Nested relationship of JSON code for comment pages

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

        使用pip安裝第三方庫,以及對應(yīng)的數(shù)據(jù)庫軟件,可以將結(jié)果保存至MySQL、MongoDB等數(shù)據(jù)庫中。本文選擇自定義saveCsv()函數(shù),將爬取結(jié)果保存至csv文件中,實現(xiàn)該步驟的代碼段如下。

        def saveCsv(datas):

        with open(′result.csv′,′a′,newline=″)as f:

        csvwriter = csv.writer(f)

        csvwriter.writerow([datas[′uid′],datas[′評論用戶′],datas[′評論時間′],datas[′評論內(nèi)容′]])

        2.4 結(jié)果分析

        按照上述流程,本文共獲取該網(wǎng)站樂高商品數(shù)據(jù)356條,爬取數(shù)據(jù)樣本示例如表1所示。

        表1 爬取數(shù)據(jù)樣本示例

        2.5 特殊情況

        2.5.1 應(yīng)對反爬

        (1)請求頭。爬蟲可以在程序中添加請求頭信息達到偽裝成瀏覽器的目的,從而實現(xiàn)反反爬機制,程序為res=requests.get(url=url,headers=headers),其中url為請求網(wǎng)頁地址,headers為開發(fā)者工具中獲取的“User-Agent”請求頭信息[6]。

        (2)Cookie。部分需要登錄的網(wǎng)站,需要添加cookie信息。由于cookie具有生命周期,因此本研究在程序設(shè)計上采用分部爬取(20頁信息為一個部分)方式,爬取間隔更換cookie信息,防止反爬。

        (3)Token。Token實質(zhì)是訪問資源的憑證,一般是用戶通過用戶名和密碼登錄成功后,服務(wù)器將登錄憑證作為數(shù)字簽名,加密之后得到的字符串即token。查找源代碼發(fā)現(xiàn)token就是放在cookie中的m_h5_tk值,并且token值也存在生命周期,需要定期更換。

        2.5.2 遵守robot協(xié)議

        在使用爬蟲進行數(shù)據(jù)采集的過程中,應(yīng)注意遵守對方網(wǎng)站robot協(xié)議的規(guī)定,本文在實驗過程中充分考慮到這一點,在采集程序加入time.sleep(10)語句用于將爬蟲訪問的頻率近似到類人水平[3]。

        3 數(shù)據(jù)挖掘(Data mining)

        3.1 數(shù)據(jù)預(yù)處理

        由于商品的評論內(nèi)容是日??谡Z評論,所以文本存在語言隨性、表達多樣、噪聲大、語言不唯一等情況,進行數(shù)據(jù)清洗可以讓評論文本更加簡潔明了。因此,本文對“評論內(nèi)容”屬性列進行去除空格、網(wǎng)址、日期及時間等處理。

        3.2 Jieba分詞

        中文分詞是中文文本處理的一個基礎(chǔ)步驟,也是中文人機自然語言交互的基礎(chǔ)模塊,在進行中文自然語言處理時,通常需要先進行分詞。jieba分詞支持三種分詞模式,即精確模式、全模式、搜索引擎模式[7]。精確模式是將句子精確地切分,更適用于文本分析;全模式是把句子中所有可以成詞的詞語掃描出來,較為煩瑣;搜索引擎模式是在精確模式的基礎(chǔ)上,對長詞再次切分,更適用于搜索引擎數(shù)據(jù)的分詞?;诒狙芯恐信廊〉臄?shù)據(jù)全部為文本數(shù)據(jù),因此采用精確模式j(luò)ieba.lcut( )對評論內(nèi)容進行分詞,為情感分析環(huán)節(jié)奠定基礎(chǔ)。

        3.3 SnowNLP情感分析

        SnowNLP是一個功能強大的中文文本處理庫,它具有中文分詞、詞性標注、情感分析、文本分類、關(guān)鍵字/摘要提取、TF/IDF、文本相似度等諸多功能[8]。SnowNLP利用機器學習和自然語言處理技術(shù),對文本進行情感分析,將其歸類為積極、消極或中性等情感類別,并給出相應(yīng)的情感得分emotion。emotion是一個介于0到1的實數(shù),其中0表示強烈的消極情感,1表示強烈的積極情感,中間的值表示中性或較弱的情感傾向。

        3.3.1 情感得分

        使用SnowNLP模塊對評論進行情感打分,得分示例如表2 所示。由SnowNLP模塊計算可知,emotion的平均值約為0.61,中位數(shù)約為0.81,單純從評論情感分來看,得出好評多于差評的結(jié)果。

        表2 SnowNLP情感得分示例

        3.3.2 繪制情感分直方圖

        使用matplotlib.pyplot庫繪制情感分直方圖(圖7)。

        圖7 情感分直方圖Fig.7 Histogram of sentiment score

        由圖7可以看出,大部分用戶的評論情感分較高,介于0.8~1.0,反映出用戶對于樂高銷售的整體反響較好,態(tài)度積極向上;但也存在部分得分相對較低評論,并且絕大部分得分介于0.0~0.2,這也對商家起到了警示作用,需要注重用戶反饋的信息,及時采取措施糾正或完善??傮w來說,評論數(shù)據(jù)情感分布兩級分化較為嚴重,提醒商家需要調(diào)整銷售策略,做到揚長避短。

        3.3.3 劃分積極評論

        根據(jù)情感評分模型的特點,觀察得到當評論為“不錯”時,輸出得分為0.861 213;評論為“好”時,輸出得分為0.655 863;評論為“一般”時,輸出得分為0.526 233。根據(jù)多條輸出結(jié)果,判定情感傾向的標準是得分大于等于0.6時,可認定為積極態(tài)度評論,統(tǒng)計得到積極評論數(shù)量為235條且占比約為66%,繪制其積極評論占比圖如圖8所示。

        圖8 積極評論占比圖Fig.8 Proportion of positive comments

        根據(jù)圖8得知大部分用戶對樂高商品較為滿意,可進一步挖掘積極態(tài)度的評論,探究用戶評論高頻詞,幫助商家調(diào)整銷售策略,做到優(yōu)勢最大化。

        3.3.4 提取評論高頻詞

        對上述劃分為積極態(tài)度的評論內(nèi)容進行分詞并按詞頻統(tǒng)計,提取評論中出現(xiàn)的高頻詞,并繪制評論高頻詞云圖(圖9)。

        圖9 評論高頻詞云圖Fig.9 Word cloud diagram of high frequency comments

        根據(jù)詞頻展示結(jié)果,可以清楚地看到“喜歡”“不錯”等字眼占據(jù)評論數(shù)據(jù)的主要地位,“快遞”“盒子”“包裝”等詞匯顯示出樂高玩具的用戶比較注重快遞包裝外觀,樂高銷售商可在這個方面進一步做提升,獲得更高的用戶滿意度。

        4 結(jié)論(Conclusion)

        目前,JS逆向技術(shù)儼然成為爬蟲領(lǐng)域的重要探索工具:首先通過對網(wǎng)頁的結(jié)構(gòu)進行分析,找出請求信息中的加密參數(shù);其次通過斷點技術(shù),尋找有用參數(shù)的加密流程;最后模擬瀏覽器動態(tài)構(gòu)造請求信息獲得數(shù)據(jù)。與傳統(tǒng)的爬蟲技術(shù)相比,整個爬取過程的復(fù)雜度和難度都增加了。本文在前人研究的基礎(chǔ)上,以某購物網(wǎng)站樂高商品評論數(shù)據(jù)的爬取過程為例,基于Python語言采用JS逆向技術(shù),詳細描述JS逆向技術(shù)流程,批量爬取了多個商品的評論數(shù)據(jù),并對其結(jié)果進行SnowNLP情感分析、提取評論高頻詞,挖掘樂高商品銷售可能存在的優(yōu)勢與不足。所使用的爬蟲算法及具體實踐對使用了Ajax和JS加密的數(shù)據(jù)獲取有一定的參考作用。

        猜你喜歡
        爬蟲逆向網(wǎng)頁
        利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
        逆向而行
        基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
        基于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
        逆向解答
        基于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
        網(wǎng)頁制作在英語教學中的應(yīng)用
        電子測試(2015年18期)2016-01-14 01:22:58
        10個必知的網(wǎng)頁設(shè)計術(shù)語
        亚洲一区二区女搞男| 色二av手机版在线| 无码少妇一级AV便在线观看| 未满十八勿入av网免费| 久久久精品人妻一区二| 久久久精品人妻一区二区三区免费| 亚洲女人毛茸茸粉红大阴户传播| 99久久免费国产精品| 福利在线国产| 亚洲春色视频在线观看| 国产日本精品视频一区二区| 亚洲国产成人精品无码一区二区 | 99精品一区二区三区免费视频| 免费观看在线一区二区| 亚洲色图三级在线观看| 欧美xxxx色视频在线观看 | 全球中文成人在线| 日韩精品一区二区三区视频| 国产人妖xxxx做受视频| 亚洲国产精品av麻豆网站| 特黄熟妇丰满人妻无码| 一本色综合亚洲精品蜜桃冫| 2021国产成人精品国产| 蜜桃视频网站在线免费观看| 日本道色综合久久影院| 国产自偷自偷免费一区| 久久精品国产热久久精品国产亚洲| 一区二区三区日本视频| 最新露脸自拍视频在线观看| 东北少妇不带套对白| 午夜成人理论无码电影在线播放| 不卡国产视频| 精品老熟女一区二区三区在线| 99久久免费视频色老| 韩国无码av片在线观看网站| 国产精品自在拍在线播放| 综合人妻久久一区二区精品| 欧美国产激情18| 国内精品伊人久久久久影院对白| 国产v精品成人免费视频400条| 国产丝袜长腿美臀在线观看|