汽車之家口碑資料的爬蟲
一,爬蟲都是具有時效性的,我不知道反爬蟲什麼時候更新,所以失效以後,除非工作需要,否則我也一般會維護。
二,移動客戶端網頁一般比電腦的網頁更好爬取,所以這次可以用汽車之家口碑的移動端網頁,用電腦網頁也可以,但是
需要在汽車之家論壇反爬蟲的基礎上在進行修改。比較麻煩。
三,以這篇口碑為例,
在網頁上顯示的最滿意為下圖所示
開啟網頁原始碼後,為以下程式碼
其中的“控”被<spanstyle='font-family:myfont'></span>替代,“保”被<spanstyle='font-family:myfont'></span>替代。
而我們真正需要的是和。
下面簡單說我從知乎搜到的解釋一下:這並不是一種編碼,而是叫做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座標為:
Python的話用from fontTools.ttLib import TTFont大體就是這個思路。希望能幫到大家<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.8</version> </dependency>