爬取微信公眾號


技術准備

HttpClient

Java比較常用的發起請求的工具,功能有:

  • 方便的發起get、post等請求
  • 可以設置連接池(類似線程池),使用池化思想降低頻繁創建連接的開銷
  • 可以自己編寫代碼設置多線程爬取
  • ...

代碼模板

 public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        URIBuilder uriBuilder = new URIBuilder("https://mp.weixin.qq.com/cgi-bin/bizlogin");
        HttpPost httpPost = new HttpPost(uriBuilder.build());

        httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36");

        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("action","startlogin"));

        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params,"utf8");
        httpPost.setEntity(formEntity);

        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);
            if(response.getStatusLine().getStatusCode() == 200){
                String content = EntityUtils.toString(response.getEntity(),"utf8");
                System.out.println(content);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

以上是post請求的代碼模板,get等其他請求也差不太多,將HttpPost換成HttpGet就行了

Jsoup

一個html解析工具,可以在后台很方便的像jquery一樣以標簽、類、屬性選擇器的方式,獲取指定的html標簽下的文本內容。

微信公眾平台

爬取方法

一般爬取的接口是搜狗微信、或者是微信公眾平台,這里使用的是微信公眾平台

  • 登錄微信公眾平台
  • 選擇草稿箱->新的創作
  • 選擇鏈接->其他公眾號
  • 選擇公眾號名稱或者公眾號id,就可以看到該公眾號下的內容了
  • filder進行抓包,找到該接口,使用該接口就可以抓取公眾號內容

自動登錄

動機:因為cookie過三天就會過期,每次都需要人工重新登錄,想試試可不可以自動登錄
想法:filder抓取賬號密碼登錄接口,cookie過期就使用賬號密碼重新登錄一下,填充新的cookie

實踐

抓取到登錄接口是這個:https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin&username=sdf&pwd=1234&imgcode&token

編寫代碼嘗試登錄,發現還是會跳轉到掃碼登錄,也就是說掃碼登錄是繞不開的。

因此看了一下掃碼登錄的流程,和OAuth2授權過程很像。其中必須要用到手機端進行掃碼,因此無法實現完全自動化。

掃碼登錄流程

  • 頁面上會出現二維碼,微信服務器會一直用長連接或者輪詢判斷二維碼是否被掃描
  • 二維碼被掃描,微信服務器會接收到掃描請求,向公眾號平台服務器發送手機確認請求
  • 微信公眾號平台服務器向手機發送確認請求
  • 手機確認授權,網頁得到token,跳轉登錄成功

抓包展示

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM