↑↑↑點擊上方「藍字」,關注「極客猴」html
若是你喜歡極客猴,能夠把我置頂或加爲星標python
閱讀文本大概須要 6 分鐘。正則表達式
沒有了解過字體加密的小夥伴能夠先看看上一篇,本文與上一篇重複的部分就不細講了。微信
咱們打開貓眼電影票房榜單的首頁app
https://maoyan.com/board/1函數
很明顯,貓眼電影的榜單進行了字體加密。學習
#.woff文件轉換成.xml文件
from fontTools.ttLib import TTFont
font = TTFont('./.woff')
font.saveXML('A.xml')
#對比兩個座標的差別
def compare(AA, BB):
for i in range(5):
if abs(AA[i][0] - BB[i][0]) < 80 and abs(AA[i][1] - BB[i][1]) < 80:
pass
else:
return False
return True
#True則可視爲是同一個字
# 字體解密
def modify_html(newFont, html):
basefont = TTFont('./base_font.woff')
unilist = newFont['cmap'].tables[0].ttFont.getGlyphOrder()
numlist = []
base_num = ['6', '3', '7', '1', '5', '9', '0', '4', '2', '8']
base_unicode = ['uniF0DA', 'uniE907', 'uniED01', 'uniEAE1', 'uniF206',
'uniE455', 'uniF401', 'uniE19C', 'uniEB76', 'uniF855']
for i in range(1, len(unilist)):
newGlyph = newFont['glyf'][unilist[i]].coordinates
for j in range(len(base_unicode)):
baseGlyph = basefont['glyf'][base_unicode[j]].coordinates
if compare(newGlyph,baseGlyph):
numlist.append(base_num[j])
break
rowList = []
for i in unilist[2:]:
i = i.replace('uni', '&#x').lower() + ";"
rowList.append(i)
dictory = dict(zip(rowList, numlist))
for key in dictory:
if key in html:
html = html.replace(key, str(dictory[key]))
return html
# 返回解密後的html
# 正則
def parse_page(html):
pattern = re.compile('
.*?board-index-.*?>(.*?).*?src="(.*?)".*?'
+ 'title="(.*?)".*?class="star">(.*?)字體
.*?releasetime">(.*?)flex
.*?'
+ 'realtime".*?stonefont">(.*?).*?'
+ 'total-boxoffice".*?stonefont">(.*?).*?網站
'
, re.S)
items = re.findall(pattern, html)
data = pd.DataFrame(items,columns=['index','image','title','star','releasetime','realtime','total-boxoffice'])
data['star']=data['star'].str[3:]
data['releasetime']=data['releasetime'].str[5:]
print(data)
return data
運行一下。
get。
本文相關爬蟲代碼,僅供學習交流:https://t.zsxq.com/RVn6qBU
技術·思考·職場
長按二維碼,添加關注!
本文分享自微信公衆號 - 極客猴(Geek_monkey)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。