999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于逆向技術的深層網絡爬蟲與數據分析

2023-12-06 11:33:52邢羽琪
軟件工程 2023年12期
關鍵詞:頁面情感

邢羽琪, 楊 檉

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

0 引言(Introduction)

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

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

1 JS逆向(JS reverse)

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

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

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

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

2.1 構造URL

2.1.1 查看URL構成

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

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

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

2.1.2 確定請求頭中的加密參數

在動態URL構造過程中,URL參數的變化信息一般可以在相關靜態URL及源代碼中尋找。通過多次請求分析,利用靜態的URL地址的變化構造動態鏈接,從而實現數據采集程序自動對動態網頁的爬取。

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

2.1.3 推導參數“sign”加密方式

推導參數“sign”的加密方式,具體步驟如下。

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

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

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

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

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

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

2.1.4 模擬生成URL

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

2.2 數據提取

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

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

2.3 數據保存

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

def saveCsv(datas):

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

csvwriter = csv.writer(f)

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

2.4 結果分析

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

表1 爬取數據樣本示例

2.5 特殊情況

2.5.1 應對反爬

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

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

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

2.5.2 遵守robot協議

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

3 數據挖掘(Data mining)

3.1 數據預處理

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

3.2 Jieba分詞

中文分詞是中文文本處理的一個基礎步驟,也是中文人機自然語言交互的基礎模塊,在進行中文自然語言處理時,通常需要先進行分詞。jieba分詞支持三種分詞模式,即精確模式、全模式、搜索引擎模式[7]。精確模式是將句子精確地切分,更適用于文本分析;全模式是把句子中所有可以成詞的詞語掃描出來,較為煩瑣;搜索引擎模式是在精確模式的基礎上,對長詞再次切分,更適用于搜索引擎數據的分詞。基于本研究中爬取的數據全部為文本數據,因此采用精確模式jieba.lcut( )對評論內容進行分詞,為情感分析環節奠定基礎。

3.3 SnowNLP情感分析

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

3.3.1 情感得分

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

表2 SnowNLP情感得分示例

3.3.2 繪制情感分直方圖

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

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

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

3.3.3 劃分積極評論

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

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

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

3.3.4 提取評論高頻詞

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

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

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

4 結論(Conclusion)

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

猜你喜歡
頁面情感
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
如何在情感中自我成長,保持獨立
被情感操縱的人有多可悲
失落的情感
北極光(2019年12期)2020-01-18 06:22:10
情感
如何在情感中自我成長,保持獨立
情感移植
發明與創新(2016年6期)2016-08-21 13:49:38
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 精品国产中文一级毛片在线看| 欧美区国产区| 欧美日韩精品一区二区视频| 欧美一级大片在线观看| 亚洲欧洲日韩久久狠狠爱| 综合网天天| 午夜福利免费视频| 一本久道久综合久久鬼色| 性做久久久久久久免费看| 无码专区国产精品第一页| 国产一区二区视频在线| 亚洲高清国产拍精品26u| 久久精品这里只有精99品| 亚洲无码37.| 亚洲区欧美区| 91外围女在线观看| 欧美日本在线| 91网址在线播放| 国产真实二区一区在线亚洲| 国产主播一区二区三区| 亚洲第一成年网| 国产一区二区三区在线精品专区| 无码乱人伦一区二区亚洲一| 5388国产亚洲欧美在线观看| 成人国产一区二区三区| 国产视频 第一页| 国产精品一区二区久久精品无码| 人妻无码一区二区视频| 白浆视频在线观看| 日本亚洲欧美在线| 欧美成一级| 人妻丰满熟妇AV无码区| 成人一级免费视频| 国产精欧美一区二区三区| 亚洲第一国产综合| 亚洲成aⅴ人在线观看| 成人久久精品一区二区三区| 五月天丁香婷婷综合久久| 亚洲AⅤ无码国产精品| 国产在线观看99| 午夜啪啪网| 亚洲二区视频| 高清不卡毛片| 婷婷色一区二区三区| 亚洲aaa视频| 久久大香香蕉国产免费网站| 伊人久久综在合线亚洲2019| 内射人妻无码色AV天堂| 欧美特黄一级大黄录像| 国产午夜一级毛片| 精品国产一二三区| 26uuu国产精品视频| 亚洲第一香蕉视频| 国产精品无码一区二区桃花视频| 丰满人妻被猛烈进入无码| 美女视频黄频a免费高清不卡| 国产一级毛片高清完整视频版| 不卡午夜视频| 免费一看一级毛片| 国产美女久久久久不卡| 国产激情影院| 久久精品无码国产一区二区三区 | 伊大人香蕉久久网欧美| 91成人免费观看| 亚洲毛片一级带毛片基地| 成人午夜视频网站| 国产精品19p| 福利视频99| 在线人成精品免费视频| 在线精品亚洲一区二区古装| 中文字幕亚洲另类天堂| 亚洲色婷婷一区二区| 亚洲人成网7777777国产| 亚洲精选高清无码| 国产亚洲精品97在线观看| 亚洲欧美一区在线| 国产一级裸网站| 免费人成视网站在线不卡| 免费观看精品视频999| 国产自在线拍| 2021国产乱人伦在线播放| 亚洲免费人成影院|