python爬虫大众点评店铺信息(字体加密)
作者:互联网
python爬虫大众点评店铺信息(字体加密)
1.观察网站
发现部分字体加密
2.查看请求的字体文件
发现请求到了两个字体文件,把他下载打开
3.
这就是对应该网页每个字体的unicode,发现两个字体文件同一个字符对应的编码不一样,所以都要用上
4.观察网页源代码
有很多不认识的字符,但通过比较这些字符的后四位,发现刚好和字体文件对得上,接下来就可以开干了
5.(1)将字体文件里的字符搞成列表
character = list(
'1234567890店中美家馆小车大市公酒行国品发电金心业商司超生装园场食有新限天面工'
'服海华水房饰城乐汽香部利子老艺花专东肉菜学福饭人百餐茶务通味所山区门药银农龙停尚安'
'广鑫一容动南具源兴鲜记时机烤文康信果阳理锅宝达地儿衣特产西批坊州牛佳化五米修爱北养'
'卖建材三会鸡室红站德王光名丽油院堂烧江社合星货型村自科快便日民营和活童明器烟育宾精'
'屋经居庄石顺林尔县手厅销用好客火雅盛体旅之鞋辣作粉包楼校鱼平彩上吧保永万物教吃设医'
'正造丰健点汤网庆技斯洗料配汇木缘加麻联卫川泰色世方寓风幼羊烫来高厂兰阿贝皮全女拉成'
'云维贸道术运都口博河瑞宏京际路祥青镇厨培力惠连马鸿钢训影甲助窗布富牌头四多妆吉苑沙'
'恒隆春干饼氏里二管诚制售嘉长轩杂副清计黄讯太鸭号街交与叉附近层旁对巷栋环省桥湖段乡'
'厦府铺内侧元购前幢滨处向座下県凤港开关景泉塘放昌线湾政步宁解白田町溪十八古双胜本'
'单同九迎第台玉锦底后七斜期武岭松角纪朝峰六振珠局岗洲横边济井办汉代临弄团外塔杨铁浦'
'字年岛陵原梅进荣友虹央桂沿事津凯莲丁秀柳集紫旗张谷的是不了很还个也这我就在以可到错'
'没去过感次要比觉看得说常真们但最喜哈么别位能较境非为欢然他挺着价那意种想出员两推做'
'排实分间甜度起满给热完格荐喝等其再几只现朋候样直而买于般豆量选奶打每评少算又因情找'
'些份置适什蛋师气你姐棒试总定啊足级整带虾如态且尝主话强当更板知己无酸让入啦式笑赞'
'片酱差像提队走嫩才刚午接重串回晚微周值费性桌拍跟块调糕'
)
(2)调用TTFont读取字体文件
data1 = {}
font1 = TTFont("tf1.woff")
keys1 = font1.getGlyphOrder()[2:]
for index, value in enumerate(keys1):
if value[3:] not in data1:
data1[value[3:]] = character[index]
输出结果
这是利用一个字体文件得到的字典,可以利用循环对多个字体文件进行构建字典,并且每构建一次就对我们拿到的html文本进行文本替换,这样我们拿到的html文本里的加密字符就全部替换完成,我们就可以想怎么样就怎么样的拿到我们想要的数据。
完整代码(乱写的,希望大佬不要介意,添加循环更好,这里就没添加了,也可以直接从网页里拿到字体文件的url,下载读取更方便!!!):
import requests
from lxml import etree
from fontTools.ttLib import TTFont
def spider(url,headers):
response = requests.get(url, headers=headers)
content = response.text
woff_li = list(
'1234567890店中美家馆小车大市公酒行国品发电金心业商司超生装园场食有新限天面工'
'服海华水房饰城乐汽香部利子老艺花专东肉菜学福饭人百餐茶务通味所山区门药银农龙停尚安'
'广鑫一容动南具源兴鲜记时机烤文康信果阳理锅宝达地儿衣特产西批坊州牛佳化五米修爱北养'
'卖建材三会鸡室红站德王光名丽油院堂烧江社合星货型村自科快便日民营和活童明器烟育宾精'
'屋经居庄石顺林尔县手厅销用好客火雅盛体旅之鞋辣作粉包楼校鱼平彩上吧保永万物教吃设医'
'正造丰健点汤网庆技斯洗料配汇木缘加麻联卫川泰色世方寓风幼羊烫来高厂兰阿贝皮全女拉成'
'云维贸道术运都口博河瑞宏京际路祥青镇厨培力惠连马鸿钢训影甲助窗布富牌头四多妆吉苑沙'
'恒隆春干饼氏里二管诚制售嘉长轩杂副清计黄讯太鸭号街交与叉附近层旁对巷栋环省桥湖段乡'
'厦府铺内侧元购前幢滨处向座下県凤港开关景泉塘放昌线湾政步宁解白田町溪十八古双胜本'
'单同九迎第台玉锦底后七斜期武岭松角纪朝峰六振珠局岗洲横边济井办汉代临弄团外塔杨铁浦'
'字年岛陵原梅进荣友虹央桂沿事津凯莲丁秀柳集紫旗张谷的是不了很还个也这我就在以可到错'
'没去过感次要比觉看得说常真们但最喜哈么别位能较境非为欢然他挺着价那意种想出员两推做'
'排实分间甜度起满给热完格荐喝等其再几只现朋候样直而买于般豆量选奶打每评少算又因情找'
'些份置适什蛋师气你姐棒试总定啊足级整带虾如态且尝主话强当更板知己无酸让入啦式笑赞'
'片酱差像提队走嫩才刚午接重串回晚微周值费性桌拍跟块调糕'
)
data1 = {}
font1 = TTFont("tf1.woff")
keys1 = font1.getGlyphOrder()[2:]
for index, value in enumerate(keys1):
if value[3:] not in data1:
data1[value[3:]] = woff_li[index]
data2 = {}
font2 = TTFont("tf2.woff")
keys2 = font2.getGlyphOrder()[2:]
for index, value in enumerate(keys2):
if value[3:] not in data2:
data2[value[3:]] = woff_li[index]
data3 = {}
font3 = TTFont("tf3.woff")
keys3 = font3.getGlyphOrder()[2:]
for index, value in enumerate(keys3):
if value[3:] not in data3:
data3[value[3:]] = woff_li[index]
data4 = {}
font4 = TTFont("tf4.woff")
keys4 = font4.getGlyphOrder()[2:]
for index, value in enumerate(keys4):
if value[3:] not in data4:
data4[value[3:]] = woff_li[index]
for k, v in data1.items():
# 替换
content = content.replace('&#x' + k + ';', v)
for k, v in data2.items():
# 替换
content = content.replace('&#x' + k + ';', v)
for k, v in data3.items():
# 替换
content = content.replace('&#x' + k + ';', v)
for k, v in data4.items():
# 替换
content = content.replace('&#x' + k + ';', v)
html=etree.HTML(content)
print(content)
if __name__=="__main__":
url='http://www.dianping.com/chongqing/ch10/g110'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36',
'Cookie':'自己登陆的cookie'}
spider(url,headers)
有几个字体文件就拿几个。
新手上路,大佬请关照
标签:index,加密,TTFont,python,woff,爬虫,value,content,字体 来源: https://blog.csdn.net/GAO_mm/article/details/114092944