1. 程式人生 > >汽車之家口碑資料的爬蟲

汽車之家口碑資料的爬蟲

一,爬蟲都是具有時效性的,我不知道反爬蟲什麼時候更新,所以失效以後,除非工作需要,否則我也一般會維護。

二,移動客戶端網頁一般比電腦的網頁更好爬取,所以這次可以用汽車之家口碑的移動端網頁,用電腦網頁也可以,但是

需要在汽車之家論壇反爬蟲的基礎上在進行修改。比較麻煩。

三,以這篇口碑為例,

在網頁上顯示的最滿意為下圖所示

開啟網頁原始碼後,為以下程式碼

其中的“控”被<spanstyle='font-family:myfont'>&#xee06;</span>替代,“保”被<spanstyle='font-family:myfont'>&#xec1c;</span>替代。

而我們真正需要的是&#xee06;和&#xec1c;。

下面簡單說我從知乎搜到的解釋一下:這並不是一種編碼,而是叫做numeric character reference(NCR)(數字字元參引),數字取值為目標字元的 Unicode code point;以「&#」開頭的後接十進位制數字,以「&#x」開頭的後接十六進位制數字。我們用到的是後面的十六進位制數字。比如“控”這個字的十六進位制數字為:EE06。

然後再網頁原始碼裡搜尋“myfont”:


得到一個字型檔案的url,直接在瀏覽器開啟這個URL會自動下載一個字型檔案,這是汽車之家自己編輯的一個字型檔案,相當於對於Unicode字符集的一個擴充,把想替換的字放到這個字符集中,重新給字一個Unicode碼,這樣就可以起到加密的作用。

我們用FontCreate開啟這個字型檔案,可以看到如下這些字:


一共90個字加一個空格,我沒有全部截圖,主要是我們用的的EE06的這個“控”字。

通過多次檢視這個字型檔案,我發現這些字的排列順序,和十六進位制數字會變,但是字的總數和內容不會變,也就是這90個字隨機排列。所以每解析一個頁面,就需要重新下載一次這個頁面的字型檔案,用來對應。

Java解析這個字型檔案需要用到org.apache.fontbox.ttf.TTFParser這個類,pom座標為:

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>fontbox</artifactId>
  <version>2.0.8</version>
</dependency>
Python的話用from fontTools.ttLib import TTFont大體就是這個思路。希望能幫到大家