夏玲玲 (通訊作者),戴文,韓旭,錢怡吉
(1.江蘇警官學院計算機信息與網(wǎng)絡安全系,江蘇南京,210031;2.如皋市公安局丁堰中心派出所,江蘇南通,226500)
自媒體時代,人們參與社會議題的方式更加靈活多樣,微博、微信、抖音等新媒體平臺逐漸成為社會熱點事件中民意的重要宣泄口[1]。作為2020 年度十大好用到爆的App之一的微信,是目前國內(nèi)最受歡迎也是用的最多的即時通訊軟件了,而在國外微信的使用人群也是非常龐大的。微信的流行改變了傳統(tǒng)的人際交往模式,在微信客戶端上衍生出的各類功能應用包括微信公眾號、微信朋友圈、微信群聊等,也影響了傳統(tǒng)的信息生態(tài)。微信公眾號由個人或企業(yè)組織機構(gòu)申請,通過用戶訂閱的模式將消息直接推送給用戶,成為近年來新媒體平臺的“寵兒”[2]。越來越多的個體和商家選擇開通微信公眾號發(fā)布文章或商品銷售信息,將公眾號當做一對多的思想、觀點、廣告等信息發(fā)布平臺,導致公眾號出現(xiàn)虛假消息傳播以及用戶評論出現(xiàn)“水軍”留言的現(xiàn)象。此外,某些突發(fā)事件發(fā)生后,微信公眾號的文章和用戶評論直接反映了最新的網(wǎng)絡輿情動態(tài)。政府及相關(guān)監(jiān)管部門有必要及時掌握微信公眾號的文章和用戶留言,了解最新的輿情動態(tài),面對虛假消息的傳播立即制止,針對網(wǎng)絡輿情危機及時化解并科學引導[3]。因此本系統(tǒng)設計并實現(xiàn)了一個自動采集微信公眾號文章及用戶評論的系統(tǒng),對于新媒體平臺輿情管控工作的開展具有重要意義。
微信公眾號信息采集系統(tǒng)整體架構(gòu)如圖1 所示。

圖1 系統(tǒng)整體架構(gòu)圖
本系統(tǒng)利用Selenium 庫中Webdriver[4]模塊進行模擬登錄。借助Webdriver 調(diào)用chrome 瀏覽器,通過get 請求直接轉(zhuǎn)到微信公眾號平臺的登錄界面,采用Webdriver的元素定位方式對賬號框、密碼框以及登錄按鈕進行元素定位,跳出的二維碼選擇手動方式進行掃描登錄。
文章接口的獲取經(jīng)過測試發(fā)現(xiàn)可以通過兩種途徑獲取,一種是通過微信公眾號平臺開放的接口來獲得文章列表及相關(guān)內(nèi)容,另一種是通過中間人的方式抓取手機訪問微信APP 的流量包,分析所得數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu)來獲得文章的相關(guān)信息。
(1)通過微信公眾號平臺獲取
微信官方在2017 年6 月6 號發(fā)布了一則消息:對所有公眾號開放在圖文消息中插入全平臺已群發(fā)文章鏈接(消息的鏈接地址https://mp.weixin.qq.com/s/67skuKz9Ct4niT-f4u1KA)。也就是說至此以后公眾號發(fā)布文章的時候可以直接插入其他公眾號的文章。能夠插入其他公眾號的文章說明在微信公眾號平臺中有了所有公眾號已發(fā)布文章的接口,通過這個接口可以獲取到所需的公眾號文章相關(guān)信息。
(2)通過Fiddler 抓包工具獲取
Windows 下常用的中間人抓包工具有Fiddler、Wireshark、HTTPwatch 等[5]。其中Fiddler 是以代理服務器的形式工作,通過改寫HTTP 代理,讓數(shù)據(jù)從它那通過,來監(jiān)控并且截取到數(shù)據(jù),同時能夠解析HTTP、HTTPS 加密的內(nèi)容,比較適合本系統(tǒng)的需要。通過分析Fiddler 抓取到的訪問公眾號歷史信息的數(shù)據(jù)包可以獲得相應的文章接口以及所需的參數(shù)。
微信PC 客戶端以及手機端因其自帶瀏覽器,故而能夠看到用戶評論信息,因此評論接口和文章接口一樣,通過訪問文章獲得其加載的評論信息數(shù)據(jù)包,然后解析該數(shù)據(jù)包的數(shù)據(jù)結(jié)構(gòu),獲得所需信息即可。
(1)系統(tǒng)環(huán)境選擇安裝Python 3.7.0 以及Pycharm,以及需要下載安裝Python 第三方庫包括Selenium 庫、time 庫、json 庫、requests 庫、re 庫、random 庫 等。Selenium 庫用于模擬自動登錄,time 庫用于設置等待時間避免爬取速度過快導致反爬,json 庫用于解析網(wǎng)頁返回的json 格式數(shù)據(jù)包,requests 庫用于對目標URL 發(fā)起請求并解析,re 庫用于正則匹配目標,random 庫用于產(chǎn)生遞交參數(shù)時所需要的隨機數(shù)。
(2)Fiddler 的配置,F(xiàn)iddler 需要安裝HTTPS 證書才能對這類協(xié)議內(nèi)容進行抓取。采集系統(tǒng)通過抓包手機端微信APP 來獲得評論頁的URL 時,需要對Fiddler 以及手機進行一系列的配置來達到電腦端的Fiddler 能抓取手機端微信數(shù)據(jù)流量的目的。在FiddlerOptions 的HTTPS標簽中選擇from remote clients only,這是為了防止PC端的流量干擾抓包。接著在Connections 標簽中,由于是手機連接代理,所以選擇allow remote computers to connect。配置完電腦端后,還需要對手機端進行相應的配置。首先保證手機與PC 在同一個局域網(wǎng)中,打開cmd,輸入ipconfig,查看自己的IP 地址。將手機連入與電腦相同的局域網(wǎng)中,并開啟代理。代理選項選擇手動,在代理服務器主機名中填入剛才查看到的IP 地址,在代理服務器端口選擇8888(Fiddler 默認端口為8888)。然后在手機默認瀏覽器中輸入HTTP://IP 地址:8888,點擊最下面的FiddlerRoot Certificate 下載安裝證書。因為目標是微信的流量,可以對Fiddler 設置一下過濾。對手機端微信公眾號文章瀏覽的抓包效果如圖2 所示。

圖2 微信公眾號文章瀏覽抓包結(jié)果
模擬登錄過程中,需要自動填入賬號密碼并點擊登錄,因此需要對賬號框、密碼框、以及登錄按鈕進行元素定位。定位完成后,通過清空賬號框、密碼框并遞交自己預存的賬號密碼,完成自動登錄部分。接下來跳出的就是二維碼掃描界面,這里用手機微信的掃一掃。
(1)通過微信公眾號平臺獲取
在對文章標題及鏈接的獲取前,需要對爬蟲進行一下偽裝,即添加header 信息偽裝成瀏覽器訪問,如果不添加則會報錯。這里只需要用到其中的user-agent 部分,將其與host 信息組成header 字典以備用。讀取上一步獲得cookies,登錄之后的微信公眾號首頁URL 變化為:https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=XXX,可以從這里獲取token 票據(jù)。爬取文章列表需要進行循環(huán),在每次請求文章列表接口時都需要傳入相關(guān)參數(shù),每篇文章的相關(guān)信息都存儲在app_msg_list 中,對其進行g(shù)et 請求并存儲到一個字典中,對該字典進行循環(huán)采集就能夠?qū)⑺璧奈恼聵祟}及鏈接進行爬取,最后將采集到的文章標題及鏈接存儲到本地就可以了。
(2)通過Fiddler 抓包工具獲取
將手機配置好后,通過訪問手機微信公眾號的歷史信息,F(xiàn)iddler 可以截取到文章列表頁的相關(guān)信息,可以發(fā)現(xiàn)是一個json 數(shù)據(jù)包。多加載幾篇歷史文章能夠返回多個關(guān)于文章列表的json 數(shù)據(jù)包,對比發(fā)現(xiàn)這些json 的URL 發(fā)生變化的參數(shù)都為offset,即偏移量每次增加10,由此可以獲得文章列表頁URL 的變化規(guī)律。文章列表的具體信息都在general_msg_list 字典中,將其保存為本地的.txt 文件分析其數(shù)據(jù)結(jié)構(gòu)。文章具體信息包含在app_msg_ext_info 以及multi_app_msg_item_list 中,其中前者是每個公眾號的每日推送的第一篇文章,后者則是每日推送的附加文章,可能不止一篇。
與調(diào)用微信公眾號搜索接口以及文章列表接口一樣,在調(diào)用文章評論接口時同樣需要傳入一些所需的參數(shù)。通過比對幾次評論頁鏈接的變化發(fā)現(xiàn)其中發(fā)生變化的有appmsgid、comment_id、appmsg_token、pass_ticket。_biz 是微信公眾號的id 不會改變,前面已經(jīng)做過相應的存儲所以這里也可以直接傳入。appmsgid、comment_id 以及appmsg_token 需要去網(wǎng)頁中提取,可以在文章鏈接中通過正則匹配獲得。pass_ticket 因為之前沒有做過相應的存儲,這里選擇的是從抓包軟件中直接復制進代碼中。通過構(gòu)建通用的評論頁URL,傳入所需參數(shù),對該URL 進行g(shù)et 請求并以json 格式解析即可獲得評論頁的內(nèi)容[6]。
自媒體時代,微信公眾號的低門檻可能會帶來虛假信息的傳播以及“水軍”留言的出現(xiàn)等問題。針對上述問題,對微信公眾號的文章和評論內(nèi)容進行自動化采集顯得尤為重要。本文介紹了如何設計一個基于微信公眾號的信息采集系統(tǒng),并對系統(tǒng)的各個功能模塊的實現(xiàn)做了簡要說明。該系統(tǒng)的實現(xiàn)對于新媒體平臺輿情管控工作的開展具有重要的現(xiàn)實意義。