咕咕咕,我回來啦。html
放了很久的鴿子,說好的寫貓眼票房榜推了將近一個月,輕點打我~python
寫貓眼須要先解決字體動態加密,因此先寫一篇如何破解簡單一點的XX點評字體加密。
web
下面正文開始:
瀏覽器
你們爬取分析XX點評數據,最多見的無非兩種:微信
一、分析全部店鋪的各種評分和推薦菜等cookie
二、得到店鋪裏的評論數據
app
以前寫過一篇最火的文章,《中國擼串指北:13萬家燒烤店的吃貨最愛》,就屬於第一種。編輯器
而大衆點評最大的難題就是字體加密,也就是這樣字體
很明顯點評網寧肯錯殺一萬,也不願放過一個,乾脆使用了本身定義的字體。不過既然自定義了字體,那麼網頁確定須要加載字體文件。網站
谷歌瀏覽器,右鍵檢查,進入network 而後刷新頁面,點擊Font。
咱們來下載這個加載的字體:8f8cfde4.woff
粘貼到新頁面 便可下載
將下載的字體導入FontEditor中打開
(百度家的在線字體編輯器)
http://fontstore.baidu.com/static/editor/index.html
導入以後:
咱們再結合網頁源代碼,就獲得了相應亂碼與數字的對應關係:
咱們能夠發現網頁中的亂碼和FontEditor中的亂碼後四位是同樣的,好比說圖中某店鋪的點評數爲2481,在網頁源代碼用【1】來表示,這在FontEditor的字體編輯器中對應的是【unie801,unieb78,uniefe4】。
因此咱們要作的是:
一、下載網站font字體包
二、將font字體包中導入FontEditor 觀察獲得亂碼與數字的關係
三、前綴替換,並將字體名字和它們所對應的亂碼構成一個字典
def get_font():
font = TTFont('8f8cfde4.woff')
font_names = font.getGlyphOrder()
# 這些文字就是在FontEditor軟件打開字體文件後看到的文字名字
texts = ['','','1','2','3','4','5','6','7','8','9','0']
font_name = {}
# 將字體名字和它們所對應的亂碼構成一個字典
for index,value in enumerate(texts):
a = font_names[index].replace('uni', '&#x').lower() + ";"
font_name[a] = value
return font_name
運行看一下:
沒錯,跟剛纔觀察的結果一致。
那麼下面咱們獲取網頁源代碼,並根據剛纔 get_font()構成的字典進行替換。
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
cookies = {'cookie':'你的cookies'}
url = 'http://www.dianping.com/beijing/ch10/g110p1'
html = requests.get(url, headers=headers,cookies = cookies).text
#requests得到html
num = get_font()
#得到加密映射關係
for key in num:
if key in html:
html = html.replace(key, str(num[key]))
#替換html中加密文字
再看一下結果:
這樣就破解了點評網的字體加密。
剩下各位就能夠自行用喜歡的解析方式來解析html啦。
下篇寫貓眼的字體動態加密。
轉載請儘可能帶上二維碼或者結尾註明來源,謝謝了。
原創不易,點個好看吧
本文分享自微信公衆號 - 一直學Python(python77777)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。