日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

起点中文网字体反爬

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 起点中文网字体反爬 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要爬取它的數字字體如圖
首先要獲得其字體文件.ttf
再網頁源代碼里尋找

下載此ttf文件并在FontCreator里查看

用一個新字典把英文對應成數字和 . 就可以了,然后對應的鍵值關系進行替換

步驟:
1.用re把.ttf文件下載下來并用fontTools庫進行解析,文件是動態加載的
2.找到文件里字體對應的編碼(變的)對應于數字字典里的數字
3.進行編碼和數字的替換并組合成字符串

要注意的是:
提取字體編碼的時候不可以用解析庫進行解析,不然編碼會被解析成?????了,所以只可用正則表達式把所有編碼內容匹配出來

由于是測試解決反爬,此處只爬取一頁做測試

import requests import re from lxml import etree from fontTools.ttLib import TTFont from io import BytesIOheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36', }def get_font(url):response = requests.get(url, headers=headers).content.decode('utf-8')font_url = re.search("format\('woff'\), url\('(.*?)'\) format\('truetype'\);", response, re.S).group(1)# print(font_url)font_content = requests.get(font_url, headers=headers)font = TTFont(BytesIO(font_content.content))cmap = font.getBestCmap()# 獲得字體加密編碼對應解碼值的字典font.close()# print(cmap)return cmapdef get_encode(cmap,decoded_string):word_match_dict = {'period': '.', 'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4','five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9',}encode_string = ''decoded_one_list = decoded_string.split(';')# 因為原字符串最后一個符號是;這里最后一個元素為空,要除去這個空值,不然會keyErrordecoded_one_list.pop(-1)for decoded_one in decoded_one_list:decoded_one = int(decoded_one[2:])# 不要&#key = cmap[decoded_one]encode_string += word_match_dict[key]return encode_stringdef get_info(url,cmap):response = requests.get(url, headers=headers).text'''不可以用解析庫解析,因為編碼會自動被解析掉,只可通過re'''# selector = etree.HTML(response)# p = selector.xpath('//div[@class="book-detail-wrap center990"]/div[1]/div[2]/p[3]')[0]# x = p.xpath('em[1]/span/text()')[0]# y = get_encode(cmap,x)# print(y)用解析庫解析后這些編碼就變成小正方型了,而得不到加密的編碼content = re.findall('</style><span.*?>(.*?)</span>',response,re.S)print(content)for i in content:decode_content = get_encode(font,i)print(decode_content,end=' ')if __name__ == '__main__':start_url = 'https://book.qidian.com/info/1013552688'font = get_font(start_url)get_info(start_url,font)

結果:

參考博客
https://blog.csdn.net/IT_arookie/article/details/83180875
https://blog.csdn.net/qq_35741999/article/details/82018049

總結

以上是生活随笔為你收集整理的起点中文网字体反爬的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。