最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬取2021貓眼票房字體加密實例

 更新時間:2021年02月19日 16:43:05   作者:宋宋大人  
在本篇文章里小編給大家整理的是一篇關于python爬取2021貓眼票房字體加密實例內(nèi)容,有興趣的朋友們可以學習下。

春節(jié)假期剛過,大家有沒有看春節(jié)檔的電影呢?今年的春節(jié)檔電影很是火爆,我們可以在貓眼票房app查看有關數(shù)據(jù),因為數(shù)據(jù)一致在更新,所以他的字體是動態(tài)的,想要爬取有些困難,再加上貓眼app對字體進行加密,該如何爬取呢?本文介紹反爬2021貓眼票房字體加密的實例。

一、字體加密原理

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

二、爬取實例

1、得到字體斜率字典

import requestsimport urllib.request as downimport jsonfrom fontTools.ttLib 
import TTFontimport reimport MyPyClass# 
得到字體斜率列表(部分)def font_Kdict(mapstype,maps=None):
  '''
  得到字體斜率字典(部分)
  參數(shù):
  mapstype:str->maps類型,判斷是是base/new
  maps:映射字典
  return kdict
  kdict字典關系:
  num:Klist 數(shù)字對應每條線段的斜率列表
  '''
  kdict={}

2、遍歷maps字典,找到對應的num和namecode

 for num, namecode in maps.items():
    # 跳過無用數(shù)據(jù)
    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個數(shù)據(jù)進行斜率計算,即代表繪圖的前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

3、對比斜率字典

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

4、爬取內(nèi)容

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')
  # 爬取的電影數(shù)據(jù)內(nèi)容
  content = json.loads(response.content)['movieList']['data']['list']# 信息字典movieNum={}#綜合票房數(shù)字典movieDayOne= {}#上映首日數(shù)量movieRate={}#票房占比movieshowCount={}#排片場次movieViewerAvg={}#場均人數(shù)movieInfos={}# 頁面內(nèi)容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)
# 根據(jù)得到的fontcodes映射對加密字體進行替換,得到正確數(shù)值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],
    '場均人數(shù)',movieViewerAvg[name]+'人',
    '排片場次',movieshowCount[name]]
  print(infos)

到此這篇關于python爬取2021貓眼票房字體加密實例的文章就介紹到這了,更多相關python爬2021貓眼票房數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python實現(xiàn)選取或刪除指定列包含指定內(nèi)容的行

    python實現(xiàn)選取或刪除指定列包含指定內(nèi)容的行

    這篇文章主要介紹了python實現(xiàn)選取或刪除指定列包含指定內(nèi)容的行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python測試攻略pytest.main()隱藏利器實例探究

    python測試攻略pytest.main()隱藏利器實例探究

    在Pytest測試框架中,pytest.main()是一個重要的功能,用于啟動測試執(zhí)行,它允許以不同方式運行測試,傳遞參數(shù)和配置選項,本文將深入探討pytest.main()的核心功能,提供豐富的示例代碼和更全面的內(nèi)容,
    2024-01-01
  • Python中最神秘missing()函數(shù)介紹

    Python中最神秘missing()函數(shù)介紹

    大家好,本篇文章主要講的是Python中最神秘missing()函數(shù)介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python模塊包中__init__.py文件功能分析

    Python模塊包中__init__.py文件功能分析

    這篇文章主要介紹了Python模塊包中__init__.py文件功能,簡單分析了__init__.py在調(diào)入模塊和包的過程中的作用,需要的朋友可以參考下
    2016-06-06
  • Python中函數(shù)的參數(shù)傳遞與可變長參數(shù)介紹

    Python中函數(shù)的參數(shù)傳遞與可變長參數(shù)介紹

    這篇文章主要介紹了Python中函數(shù)的參數(shù)傳遞與可變長參數(shù)介紹,本文分別給出多個代碼實例來講解多種多樣的函數(shù)參數(shù),需要的朋友可以參考下
    2015-06-06
  • 基于python的Tkinter編寫登陸注冊界面

    基于python的Tkinter編寫登陸注冊界面

    這篇文章主要為大家詳細介紹了基于python的Tkinter編寫登陸注冊界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 爬山算法簡介和Python實現(xiàn)實例

    爬山算法簡介和Python實現(xiàn)實例

    這篇文章主要介紹了爬山算法,爬山法(climbing method)是一種優(yōu)化算法,其一般從一個隨機的解開始,然后逐步找到一個最優(yōu)解(局部最優(yōu))然后用Python實現(xiàn)了這個算法,需要的朋友可以參考下
    2014-04-04
  • Python類的多繼承的搜索順序

    Python類的多繼承的搜索順序

    python和C++一樣,支持多繼承,本文主要介紹了Python類的多繼承的搜索順序,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • python中類的屬性和方法介紹

    python中類的屬性和方法介紹

    在本篇內(nèi)容里小編給大家整理了關于python中類的屬性知識點以及使用方法介紹,需要的朋友們參考下。
    2018-11-11
  • python shapely.geometry.polygon任意兩個四邊形的IOU計算實例

    python shapely.geometry.polygon任意兩個四邊形的IOU計算實例

    這篇文章主要介紹了python shapely.geometry.polygon任意兩個四邊形的IOU計算實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論

若羌县| 双峰县| 泾源县| 商河县| 潼关县| 朝阳县| 夏河县| 江西省| 金寨县| 石渠县| 嘉峪关市| 巨鹿县| 海淀区| 紫阳县| 贺兰县| 博爱县| 乌兰浩特市| 高淳县| 镇坪县| 浪卡子县| 弋阳县| 陆丰市| 那曲县| 航空| 巫溪县| 卢龙县| 巨野县| 遵化市| 洛川县| 东阿县| 榆中县| 新乡县| 黄梅县| 阳西县| 石台县| 同德县| 佳木斯市| 敖汉旗| 称多县| 湘西| 界首市|