婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)

Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)

熱門標簽:千呼ai電話機器人免費 外呼系統前面有錄音播放嗎 鎮江人工外呼系統供應商 深圳網絡外呼系統代理商 騰訊地圖標注有什么版本 柳州正規電銷機器人收費 400電話辦理費用收費 申請辦個400電話號碼 高德地圖標注字母

前言:

貓眼票房頁面的字體加密是動態的,每次或者每天加載頁面的字體文件都會有所變化,本篇內容針對這種加密方式進行分析

字體加密原理:簡單來說就是程序員在設計網站的時候使用了自己設計的字體代碼對關鍵字進行編碼,在瀏覽器加載的時會根據這個字體文件對這些字體進行編碼,從而顯示出正確的字體。

已知的使用了字體加密的一些網站:
58同城,起點,貓眼,大眾點評,啟信寶,天眼查,實習僧,汽車之家
本篇內容不過多解釋字體文件的映射關系,不了解的請自行查找其他資料。
如若還未入門爬蟲,請往這走 簡單粗暴入門法——Python爬蟲入門篇

import requests
import urllib.request as down
import json
from fontTools.ttLib import TTFont
import re
#分析用
import matplotlib.pyplot as plt #繪圖
import numpy as np # 科學計算庫

安裝:
pip install matplotlib
pip install requests
pip install numpy
pip install fonttools

首先我們對貓眼票房頁面進行簡單分析

可以看到票房數字在審查中顯示的是亂碼,類似與這種情況的就可能是使用了字體加密,因此我們需要找到字體文件(字體文件會以鏈接方式存放在頁面中)

找到了字體文件,下載并對映射關系進行分析,可以得到我們需要的一組基礎字形映射表;并且可以通過映射關系得到每個字形的所有坐標

baseFont=TTFont('maoyan.woff')
# 獲取相應數字的namecode和形狀坐標的關系,可用來獲取坐標
glyf=baseFont['glyf']
#通過對一份字體樣本分析得出的字體映射
baseNumberMaps={
 0:glyf['uniF632'],
 1:glyf['uniF2F1'],
 2:glyf['uniF0A4'],
 3:glyf['uniF7B7'],
 4:glyf['uniE82D'],
 5:glyf['uniF653'],
 6:glyf['uniE756'],
 7:glyf['uniF41A'],
 8:glyf['uniE79B'],
 9:glyf['uniE81E']
}
for num,name in baseNumberMaps.items():
 print(name.coordinates)

我們將坐標繪圖成圖形,在進行不同組字形圖形對比可以發現每套字形的坐標不同,大小比例不同,而字形是不變的,也就是相似

對比坐標發現每套字形坐標都會有所改變,但是整體圖形還是同一個,所以我想到了斜率對比,我們計算每個字形部分線段的斜率,如果斜率之差小于一個數值,就說明這兩個是相同的數字。

因此就得到了一個思路 獲得基礎字體映射關系表爬取頁面下載所加載的字體獲得需要對比的字體映射關系表計算每套字體每個字形的線段斜率,并進行差值計算循環匹配,從基礎字形的0-9開始去匹配新字形的斜率,如果斜率之差小于0.5并且樣本數>=9我們則認為兩個圖形為同一個數字,獲得正確的字體映射關系對加密字體進行替換得到正確內容

程序實現

import requests
import urllib.request as down
import json
from fontTools.ttLib import TTFont
import re
import MyPyClass

# 得到字體斜率列表(部分)
def font_Kdict(mapstype,maps=None):
 '''
 得到字體斜率字典(部分)
 參數:
 mapstype:str->maps類型,判斷是是base/new
 maps:映射字典

 return kdict
 kdict字典關系:
 num:Klist 數字對應每條線段的斜率列表
 '''
 kdict={}
 # 遍歷maps字典,找到對應的num和namecode
 for num, namecode in maps.items():
 # 跳過無用數據
 if namecode == 'x': continue
 # 判斷類型,并從.coordinates得到對應num的所有坐標
 if mapstype=='base':coordinates = namecode.coordinates
 elif mapstype=='new':coordinates=glyf[namecode].coordinates
 # 得到坐標 X列表和坐標 Y列表
 x = [i[0] for i in coordinates]
 y = [i[1] for i in coordinates]
 Klist = []
 # 遍歷X列表并切片為前10個數據進行斜率計算,即代表繪圖的前10條線段的斜率
 for index, absx in enumerate(x[:10]):
  # 當斜率為0/1時,認為斜率為1計算
  if x[index + 1] == x[index] or y[index + 1] == y[index]:
  absxy = 1
  else:
  absxy = (y[index + 1] - y[index]) / (x[index + 1] - x[index])
  # 將斜率加入到列表
  Klist.append(-absxy if absxy  0 else absxy)
 kdict[num]=Klist
 #print('base:', code, Klist, name)
 return kdict
# 對比斜率字典
def contrast_K(kbase,knew):
 '''
 對比斜率映射差距
 參數:
 kbase:基礎字體映射表的斜率字典
 knew:當前鏈接的字體映射表的斜率字典

 return:dict
 fontMaps:根據對比得出正確的字體映射關系字典

 '''
 fontMaps = {}
 # 遍歷kbase字典
 for base in kbase.items():
 n = 0 # 成功匹配的斜率個數
 # 遍歷knew字典
 for new in knew.items():
  # 遍歷kbase>knew>下的兩組斜率,進行大小匹配,
  # 如果斜率k的差值小于0.5,并且樣本數>=9時,認為兩個坐標圖形相識只是大小比例不同
  # 即k=0.5 n>=9
  for (k1,k2) in zip(base[1],new[1]):
  # k取正數
  k=k1-k2 if k1>k2 else k2-k1
  if k=0.5:
   n+=1
   continue
  else:
   break
  if n>=9:
  # 匹配正確則添加進字典中 此時的字典關系是:code:num 代碼對應數字的關系
  fontMaps[str(hex(new[0]).replace('0x','#x'))]=str(base[0])
  break
  n=0
 #print(fontMaps)
 return fontMaps

# 建立基礎字體對象
baseFont=TTFont('maoyan.woff')
# 獲取相應數字的namecode和形狀坐標的關系,可用來獲取坐標
glyf=baseFont['glyf']
#通過對一份字體樣本分析得出的字體映射
baseNumberMaps={
 0:glyf['uniF632'],
 1:glyf['uniF2F1'],
 2:glyf['uniF0A4'],
 3:glyf['uniF7B7'],
 4:glyf['uniE82D'],
 5:glyf['uniF653'],
 6:glyf['uniE756'],
 7:glyf['uniF41A'],
 8:glyf['uniE79B'],
 9:glyf['uniE81E']
}
url='https://piaofang.maoyan.com/dashboard-ajax?orderType=0uuid=1778ad877f8c8-0b23bf32a2bb26-c7d6957-1fa400-1778ad877f8c8riskLevel=71optimusCode=10'
ua=MyPyClass.GetUserAgent()#獲得ua
# 爬取內容
with requests.get(url,headers={'user-agent':ua}) as response:
 # 獲取存放字典的json字段,并提取字體url
 fontStyle=json.loads(response.content)['fontStyle']
 fontStyle=re.findall('\"([\s\S]*?)\"',fontStyle[::-1])
 fonturl='http:'+fontStyle[0][::-1]# 字體url鏈接
 # 將加載的字體下載保存到本地,并對其進行分析
 down.urlretrieve(fonturl,'newfont.woff')
 # 爬取的電影數據內容
 content = json.loads(response.content)['movieList']['data']['list']
# 信息字典
movieNum={}#綜合票房數字典
movieDayOne= {}#上映首日數量
movieRate={}#票房占比
movieshowCount={}#排片場次
movieViewerAvg={}#場均人數
movieInfos={}
# 頁面內容
for i in content:
 moviename=i['movieInfo']['movieName']
 movieNum[moviename]=i['boxSplitUnit']['num']
 movieDayOne[moviename]=i['sumBoxDesc']
 movieRate[moviename]=i['splitBoxRate']
 movieshowCount[moviename]=i['showCount']
 movieViewerAvg[moviename]=i['avgShowView']

# 新字體對象
fontnew=TTFont('newfont.woff')
# 得到當前字體的映射關系表
newNumberMaps=fontnew.getBestCmap()
# 獲取字形
glyf=fontnew['glyf']
# 基礎字體斜率字典
k_base_dict=font_Kdict(maps=baseNumberMaps,mapstype='base')
# 新字體斜率字典
k_new_dict=font_Kdict(maps=fontnew.getBestCmap(),mapstype='new')
# 得到字體映射字典
fontcodes=contrast_K(k_base_dict,k_new_dict)
# 對加密的字體遍歷分組,并去除無用字符
for name,numbercode in movieNum.items():
 movieNum[name]=re.findall('([\S]*?);', numbercode)
# 根據得到的fontcodes映射對加密字體進行替換,得到正確數值
for index,(name,numbercodelist) in enumerate(movieNum.items()):
 num=[]
 # 替換操作
 for code in numbercodelist:
 if '.' in code:
  code=code.replace('.','')
  num.append('.'+fontcodes[code])
 else:
  num.append(fontcodes[code])
 infos=['排行:'+str(index+1),
 '片名',name,
 '上映首日',movieDayOne[name],
 '票房',''.join(num)+'萬',
 '票房占比',movieRate[name],
 '場均人數',movieViewerAvg[name]+'人',
 '排片場次',movieshowCount[name]]
 print(infos)

實現效果如下

到此這篇關于Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)的文章就介紹到這了,更多相關Python爬蟲貓眼票房字體反爬內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 逆向爬蟲正確調用 JAR 加密邏輯
  • Python3 使用cookiejar管理cookie的方法
  • python調用java的jar包方法
  • Java實現的執行python腳本工具類示例【使用jython.jar】
  • Python創建自己的加密貨幣的示例
  • python通過cython加密代碼
  • python 實現aes256加密
  • Python 正確調用 jar 包加密得到加密值的操作方法

標簽:合肥 大慶 烏蘭察布 平頂山 烏蘭察布 海南 哈爾濱 郴州

巨人網絡通訊聲明:本文標題《Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)》,本文關鍵詞  Python,爬蟲,實例,之,2021,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)》相關的同類信息!
  • 本頁收集關于Python爬蟲實例之2021貓眼票房字體加密反爬策略(粗略版)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品一区二区三区乱码| 欧美喷水一区二区| 久久99精品国产.久久久久久| 亚洲一区二区三区四区五区中文| 亚洲一区二区三区中文字幕| 亚洲精品高清视频在线观看| 亚洲一区二区三区四区不卡| 亚洲1区2区3区4区| 日韩精品一二三区| 精品夜夜嗨av一区二区三区| 国产毛片一区二区| 成人h动漫精品一区二| 一本色道久久综合亚洲aⅴ蜜桃 | 99精品视频免费在线观看| 国产91精品一区二区麻豆网站| 国产传媒日韩欧美成人| 91视频免费观看| 欧美日韩大陆一区二区| 26uuu国产一区二区三区| 中文字幕av不卡| 一区二区在线观看视频在线观看| 午夜精品久久久久久久久久久| 美女在线观看视频一区二区| 国产成人精品综合在线观看| 色播五月激情综合网| 日韩视频在线你懂得| 国产精品久久久久久福利一牛影视 | 最新国产の精品合集bt伙计| 亚洲高清三级视频| 国产精品一区二区在线播放| 91久久香蕉国产日韩欧美9色| 欧美白人最猛性xxxxx69交| 自拍偷拍亚洲激情| 激情久久五月天| 欧美日韩中文一区| 亚洲国产经典视频| 久久99精品国产麻豆婷婷洗澡| av电影天堂一区二区在线| 欧美一卡二卡三卡四卡| 亚洲视频在线一区| 久国产精品韩国三级视频| 在线观看国产91| 欧美激情一区二区三区全黄| 日本成人在线不卡视频| 色综合久久88色综合天天6| 久久久夜色精品亚洲| 石原莉奈在线亚洲三区| 色综合久久久久| 中文字幕免费不卡| 国产一区二区三区精品视频| 欧美日韩国产123区| 亚洲精品久久久蜜桃| 成人免费观看视频| 国产欧美日韩精品在线| 六月丁香婷婷久久| 欧美一级xxx| 亚洲国产精品视频| 欧美日韩日本视频| 亚洲一区二区三区四区的| 99精品欧美一区二区三区综合在线| 久久―日本道色综合久久| 免费看黄色91| 日韩一区二区视频| 秋霞电影一区二区| 欧美一区二区三区啪啪| 喷白浆一区二区| 欧美一区二区三区爱爱| 老司机午夜精品| 精品国产乱码久久久久久闺蜜| 免费高清成人在线| 欧美一级片免费看| 国内一区二区在线| 欧美激情一二三区| 波多野结衣91| 亚洲欧美乱综合| 欧美视频完全免费看| 五月天中文字幕一区二区| 欧美精品一级二级| 日韩精品1区2区3区| 精品少妇一区二区三区视频免付费 | 国产主播一区二区三区| 国产亚洲欧美激情| 成人av网站大全| 亚洲免费在线电影| 91精品国产一区二区三区| 日本女优在线视频一区二区| 日韩欧美精品在线| 国产毛片精品视频| 亚洲欧洲日韩在线| 欧美日韩国产首页| 国产一区在线精品| 综合激情成人伊人| 在线电影一区二区三区| 国产呦精品一区二区三区网站| 国产精品福利一区二区| 欧美另类一区二区三区| 国产盗摄精品一区二区三区在线 | 国产成人午夜视频| 玉米视频成人免费看| 日韩亚洲欧美在线| 99re这里都是精品| 日本午夜精品视频在线观看| 欧美国产激情二区三区| 精品视频一区 二区 三区| 国产一区二区导航在线播放| 自拍av一区二区三区| 日韩一区二区在线看| 91尤物视频在线观看| 免费成人深夜小野草| 亚洲天堂a在线| 日韩亚洲欧美一区二区三区| 91香蕉视频黄| 国产91精品欧美| 日韩高清不卡一区二区| 亚洲激情第一区| 国产亚洲婷婷免费| 日韩一区二区三区av| 欧美性xxxxxxxx| aaa亚洲精品一二三区| 蜜臀国产一区二区三区在线播放| 亚洲私人黄色宅男| 国产亚洲一区二区在线观看| 日韩一卡二卡三卡| 欧美日韩国产一二三| 在线观看一区不卡| eeuss鲁片一区二区三区在线看| 另类小说色综合网站| 丝袜亚洲另类欧美| 亚洲精品菠萝久久久久久久| 中文字幕不卡一区| 欧美国产欧美综合| 中文字幕高清不卡| 久久精品一区四区| 久久综合狠狠综合| 久久综合一区二区| 日韩免费观看高清完整版| 欧美一区二区三区免费大片| 在线精品视频一区二区三四| 色婷婷av一区二区三区之一色屋| 成人白浆超碰人人人人| 白白色亚洲国产精品| 成人av网站免费观看| 成人精品视频一区二区三区| 国产一区二区美女| 粉嫩13p一区二区三区| 风间由美一区二区三区在线观看| 国产美女av一区二区三区| 国产盗摄女厕一区二区三区| 国产一区二区三区在线观看免费| 韩国精品久久久| 国产福利一区二区三区在线视频| 国产美女一区二区三区| 丁香桃色午夜亚洲一区二区三区| 成人永久免费视频| 色欧美日韩亚洲| 欧美无乱码久久久免费午夜一区| 欧美日韩在线三级| 日韩欧美一卡二卡| 久久精品视频在线免费观看| 中文字幕高清一区| 亚洲线精品一区二区三区| 亚洲超碰97人人做人人爱| 美女视频黄 久久| 成人午夜短视频| 在线视频国产一区| 欧美成人一区二区三区片免费 | 爽好久久久欧美精品| 精品亚洲aⅴ乱码一区二区三区| 国产做a爰片久久毛片| 波多野结衣中文字幕一区二区三区 | 中文字幕国产一区二区| 亚洲国产视频一区二区| 激情久久五月天| 99久久精品免费看国产免费软件| 欧美日韩大陆在线| 中文一区一区三区高中清不卡| 亚洲日本在线a| 精品午夜一区二区三区在线观看| 成人国产视频在线观看| 欧美一区二区日韩| 中文字幕一区二区5566日韩| 日韩高清中文字幕一区| 成人av动漫在线| 日韩一二三区不卡| 亚洲最大成人综合| 国产黄色成人av| 欧美日韩精品一区二区三区四区 | 欧美精彩视频一区二区三区| 亚洲综合激情网| 国产剧情一区二区| 欧美精品99久久久**| 亚洲欧洲精品天堂一级| 激情国产一区二区| 欧美二区三区的天堂| 亚洲激情六月丁香| 成人高清免费在线播放| 久久香蕉国产线看观看99| 午夜视频一区二区| 色欧美日韩亚洲| 亚洲啪啪综合av一区二区三区|