控制台輸出:
文章數據:
HTML預覽:
目前支援兩種方式爬取文章。
透過搜狗微信的搜尋結果來抓取文章。
優點:這種方式不需要登入認證,操作簡單。
缺點:只能抓取最近10個資料。
使用場景:適合配置定時抓取任務,以取得大量資料。
截獲微信公眾號文章列表的Ajax請求參數,模擬微信客戶端讀取文章列表和文章資訊。
優點:能取得公眾號所有文章資料。
缺點:需要登入微信,並且透過工具手動設定Cookie等參數,才能使用。
使用場景:一次大量抓取公眾號數據,抓取完後配合搜狗法更新數據。
NodeJS & NPM, Chrome瀏覽器, 微信桌面用戶端(Mac 或Windows都可)
git clone [email protected]:f111fei/article_spider.git
cd article_spider
npm install typescript -g
npm install
tsc
設定專案根目錄下的config.json
檔案。欄位定義如下:
interface Config {
// 必填,要抓取的微信公众号名称。
name: string;
// 可选,若快打码平台的账号密码。用于搜狗抓取模式下自动识别验证码。
ruokuai: {
username: string;
password: string;
};
wechat: {
// 可选,要抓取文章的起始页,默认0
start?: number;
// 可选,要抓取的文章数,默认不限制
maxNum?: number;
// 可选,抓取模式(sougou, all)。默认all
mode?: string;
// 抓取模式为all时有效,公众号的biz字段,获取方法参见下面
biz?: string;
// 抓取模式为all时有效,当前cookie字段,获取方法参见下面
cookie?: string;
// 抓取模式为all时有效,当前appmsg_token字段,获取方法参见下面
appmsg_token?: string;
};
}
如果抓取模式為sougou
,請跳過此節。
要取得文章清單的Ajax請求數據,需要對取得文章清單資料的請求進行抓包,找到biz,cookie,appmsg_token等關鍵參數。以下介紹如何抓取請求參數。
以抓取NASA爱好者
這個公眾號為例。
1.開啟公眾號--- 右上角--- 點擊查看歷史消息
注意: 配置裡面的
name
字段,應該填入這裡的微訊號nasawatch
,而不是NASA爱好者
。
2.在開啟的視窗中,點選選單列上的用預設瀏覽器(Chrome)打開,使用Chrome開啟文章清單頁。
3.如果在瀏覽器中開啟出現请在微信客户端打开链接。
的提示,說明這個URL經過加密了,請按照下面操作取得正確的URL。否則跳過此步。
關閉微信客戶端,找到微信桌面客戶端可執行程式的位置。使用命令列啟動程式:
Windows下通常是:
"C:Program Files (x86)TencentWeChatWeChat.exe" --remote-debugging-port=9222
Mac下通常是:
"/Applications/WeChat.app/Contents/MacOS/WeChat" --remote-debugging-port=9222
依照步驟1開啟歷史訊息頁。
使用Chrome瀏覽器開啟URL http://127.0.0.1:9222/json
。
複製url字段,在新標籤頁中打開,就可以看到正確的歷史訊息頁了。
4.在歷史訊息頁中,點選右鍵---- 檢查,開啟Chrome開發者工具---- 切換到Network頁籤---- 刷新瀏覽器。在右邊找到cookie, biz, appmsg_token等欄位填入config.json
中。
需要向下捲動清單頁載入下一頁找到
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg
開頭的請求,查看其參數。
這些欄位可能幾個小時之後就會失效,可以重新依照上述步驟重新取得。
npm start
爬到的文章訊息,圖片,文章原始資料會存入專案根目錄的db資料夾下。