有一天考廉,需要爬取某個公眾號的歷史數(shù)據(jù)上忍,又不想花錢,所以研究了下WebScraper酱吝,成功地抓取到了近一年的所有文章數(shù)據(jù)也殖,沒花一分錢(西瓜助手應該需要先成為會員,不確定費用多少务热,我是通過活動免費領(lǐng)取的)忆嗜。
一、抓取邏輯
因為WebScraper是一個最常用的網(wǎng)頁爬蟲(對WebScraper不熟悉的同學可能先要去搜兩篇文章看看它的基礎用法)陕习,簡單地說就是只要你給他一個網(wǎng)頁霎褐,他就能把里面的內(nèi)容都給抓下來。
但是该镣,由于反爬的考慮冻璃,微信對公眾號歷史文章顯示的限制越來越嚴,搜狗瀏覽器损合、微信客戶端等地方都無法查看到完整的文章列表省艳。
有些免費工具,比如微小寶可以查看7天的文章嫁审,但是我要研究的這個公眾號更新頻率很低跋炕,一個月才發(fā)5-6次,近七天的文章也就1-2篇律适,根本滿足不了需求辐烂。
當然,還有一些網(wǎng)站捂贿,類似傳送門纠修,會幫你收集好歷史文章,但是僅限于一些熱門公眾號厂僧,而且很多公眾號的文章都比較舊扣草。
后來,無意中看到「西瓜助手」中可以查看一年的歷史數(shù)據(jù)颜屠,而且是網(wǎng)頁形式辰妙,所以想著和WebScraper結(jié)合起來試試,果然成功了甫窟,特分享給大家密浑。
注意:很多工具,包括微信自身在內(nèi)粗井,提供的功能經(jīng)常會變肴掷,如果你閱讀的時候發(fā)現(xiàn)這個方法不行了敬锐,也麻煩告訴我一聲,我好找一找新的方法呆瞻。
二、使用西瓜助手獲取公眾號歷史文章列表
1径玖、登錄西瓜助手
2痴脾、點擊左側(cè)導航欄里的“素材收集”——“全網(wǎng)優(yōu)質(zhì)素材”,然后在右面界面的輸入框(下圖2)中輸入公眾號梳星,然后點擊【搜公眾號】赞赖。
3、在搜索結(jié)果列表中選擇你要找的公眾號冤灾,點擊即可打開公眾號詳情頁面前域。
4暴浦、在頁面下方有個“最新推文”tab翻斟,里面可以查看最新的公眾號文章,點擊下方【加載更多歷史文章...】按鈕可以顯示更多的歷史文章虎忌。
三归粉、WebScraper的核心邏輯和工作步驟
1椿疗、WebScraper爬蟲的核心邏輯
WebScraper抓取的核心邏輯在于選擇器的設置,比如最簡單的文本(Text)糠悼、超鏈接(Link)届榄,到表格(Table)、圖像(Image)倔喂,然后是復雜些的元素集(Element)铝条,以及這些基本類型的變體,比如彈出的超鏈接(Popup Link)席噩,點擊加載更多的元素集(Element Click班缰,這次我們就要用到這位)。
背后的邏輯其實也很簡單:因為HTML是結(jié)構(gòu)化的班挖,頁面是由很多tag組成的鲁捏,而且這些tag間是有層次的,設置選擇器就相當于告訴WebScraper要去抓哪個(哪類)tag萧芙,它是什么類型给梅,處在哪個層次。
2双揪、WebScraper工作步驟
WebScraper是Chrome瀏覽器里的一個插件动羽,安裝完(安裝如果遇到問題,可以去搜一下Chrome插件安裝的問題解答)之后渔期,爬取一個網(wǎng)頁大致需要以下幾個步驟:
1)創(chuàng)建站點地圖
要去哪里爬取數(shù)據(jù)
2)配置選擇器
要抓頁面上哪些內(nèi)容
3)開爬Scrape
4)導出結(jié)果
更多基礎介紹运吓,大家可以自行搜索渴邦。
四、使用WebScraper抓取數(shù)據(jù)
1拘哨、準備工作
登錄「西瓜助手」并打開“最新推文”頁面谋梭,打開Chrome控制臺(快捷鍵F12),點擊Web Scraper打開工作臺倦青。
2瓮床、創(chuàng)建站點地圖
名字(name)取一個方便記的。Start URL就是當前瀏覽器里顯示的地址产镐,直接拷貝過來即可隘庄。
創(chuàng)建成功后,你會在“Create new sitemap”菜單前看到一個“Sitemap jiadiany”的菜單癣亚,后續(xù)所有操作都在這個菜單下進行丑掺。
3、配置選擇器
在配置選擇器之前述雾,需要先分析一下頁面街州,看你要抓取哪些數(shù)據(jù),有什么特點绰咽,然后可以逐步嘗試可行性菇肃。
最新推文是按照時間從近到遠排列的,最理想的我們是把整個區(qū)域1的數(shù)據(jù)做一個整體抓取下來取募,但是后來在選擇器選取的時候始終無法選取到區(qū)域1琐谤,因此只能退而求其次選擇了區(qū)域2,這里面就把“推文時間”給丟失了玩敏,后面在整理數(shù)據(jù)時我們可以利用一個值來對文章時間排序斗忌,但是沒有絕對推文時間。
小技巧:在選擇區(qū)域2的時候也遇到了問題旺聚,用鼠標始終無法選定這個區(qū)域织阳,所以我們把“Enable key”開關(guān)打開,然后先選擇一個小的元素砰粹,然后通過按鍵P(選取它的父節(jié)點)和C(選取它的子節(jié)點)來微調(diào)唧躲。
確定了要爬取區(qū)域2的數(shù)據(jù),那我們就知道需要創(chuàng)建一個Element的選擇器碱璃。同時弄痹,注意到這個頁面一次性只顯示部分數(shù)據(jù),需要點擊頁面底部「加載更多歷史文章...」按鈕來加載更多數(shù)據(jù)嵌器,因此我們需要用到Element選擇器的變體Element click肛真。
省略具體的操作過程,該“Element click”選擇器的具體配置如下:
另外爽航,因為需要抓取區(qū)域2里面的“傳播指數(shù)”(text)蚓让、“封面/文章標題”(link)乾忱、閱讀數(shù)(text)、贊數(shù)(text历极,也就是最新的在看數(shù))等數(shù)據(jù)窄瘟,因此需要在article下分別創(chuàng)建這些選擇器。
相應的選擇器圖譜和“封面/文章標題”(link)選擇器配置如下:
小技巧:選擇器創(chuàng)建完之后执解,在Actions下面有兩個按鈕“Element preview”和“Data preview”寞肖,可以點擊模擬一下看選擇的元素及數(shù)據(jù)是否正確。
4衰腌、開始爬取并導出數(shù)據(jù)
選擇器配置好之后,就可以開始爬取了(點擊Scrape菜單)觅赊,你可以看到插件就好像在模擬人一樣瀏覽這個頁面右蕊,抓取區(qū)域2里面的數(shù)據(jù),然后再點擊按鈕加載更多數(shù)據(jù)吮螺,直至觸達停止條件饶囚。
爬取完成后,就可以直接導出一個csv文件鸠补。至此萝风,整個爬取過程就結(jié)束了。
導出的站點地圖詳情(Json):
{"_id":"jiadiany","startUrl":["https://zs.xiguaji.com/Member#/MBiz/Detail/df0d2a/723965"],"selectors":[{"id":"article","type":"SelectorElementClick","selector":"div.public-details-content tbody","parentSelectors":["_root"],"multiple":true,"delay":0,"clickElementSelector":"div.loadingMorePanel a.btn","clickType":"clickMore","discardInitialElements":false,"clickElementUniquenessType":"uniqueCSSSelector"},{"id":"index","type":"SelectorText","selector":"tr:nth-of-type(1) span.risk-index","parentSelectors":["article"],"multiple":false,"regex":"","delay":0},{"id":"titlelink","type":"SelectorLink","selector":"tr:nth-of-type(1) div.mp-article-title a","parentSelectors":["article"],"multiple":false,"delay":0},{"id":"readcnt","type":"SelectorText","selector":"tr:nth-of-type(1) td:nth-of-type(5)","parentSelectors":["article"],"multiple":false,"regex":"","delay":0},{"id":"rank","type":"SelectorText","selector":"tr:nth-of-type(1) td:nth-of-type(6)","parentSelectors":["article"],"multiple":false,"regex":"","delay":0}]}
五紫岩、數(shù)據(jù)處理
打開CSV文件规惰,我們可以簡單對數(shù)據(jù)進行處理,以便更好地分析泉蝌。
1歇万、按照字段“web-scraper-order”排序(這個字段的意思是WebScraper采集的順序,也就是文章的時間順序)勋陪。
2贪磺、將閱讀數(shù)10001+(文本)替換成數(shù)字10001,以便我們進行統(tǒng)計诅愚。
3寒锚、標題和正文,我們可以進一步用NLPIR工具進行處理违孝。
有任何問題刹前,歡迎提出來一起討論研究。
轉(zhuǎn)載說明:本文為“三少爺?shù)囊姟痹瓌?chuàng)文章等浊,轉(zhuǎn)載請務必注明出處腮郊。