最近做爬虫时候,遇到个比较头大的事儿,页面看到的信息,在源码内。。。是一坨坨不知道是什么东西的
。。。东西。。
也就是说,他把关键部分的信息。。不知道用什么原因混淆了。。
往常没有爬过这一类网站,所以算是第一次解决。
简单记录一下。。
- 既然它页面可以正常显示,那么肯定数据是拿到的,那么解析的方式不一样。。看一下元素样式,发现
这里一堆。。。secret 最像了。。加密嘛。当然如果不这么明显就挨个取消样式,看看去掉哪个后,界面不正常显示了,
那就找到了。。
- 既然是个样式,那么就去CSS里面搜一下,源码先找一找。。。
好家伙。。还挺看不起我,打个备注。。混淆。。字体文件被变成base64放在了页面里。当然也有些网站会放到CSS文件里面。或者引用 TTF 等字体文件。
- 接下来。。解密
base64 解密写入一个字体文件,验证下是不是我们需要的ttf文件
通过工具打开文件。。。我用多个是FontCreator
哦吼。。这一堆 9FA4 9EA3 的。。好像和我界面看到的还是不太一样。。看起来应该是被编码后的。。从源码贴出来,多试试几种编码,
发现是ASCII的。。。然后就差不多了。。
BinaryWriter bw;
try
{
bw = new BinaryWriter(new FileStream("mydata1.ttf",
FileMode.Create));
}
catch (IOException e)
{
Console.WriteLine(e.Message + "\n Cannot create file.");
return;
}
bw.Write(decodedByteArray, 0, decodedByteArray.Length);
bw.Close();
var families = Fonts.GetFontFamilies(location: @"D:\WorkDir\worktest\DownloadTest\CodeEncrpy\bin\Debug\mydata1.ttf");
foreach (FontFamily item in families)
{
var types = item.GetTypefaces();
foreach (Typeface face in types)
{
GlyphTypeface glyph;
face.TryGetGlyphTypeface(out glyph);
IDictionary<int, ushort> dic = glyph.CharacterToGlyphMap;
foreach (KeyValuePair<int, ushort> kp in dic)
{
Console.WriteLine(Ten2Hex(kp.Key.ToString()) + " " + (kp.Value - 1));
}
}
}
这样输出了 ASCII码 和 值的对应关系。。然后。。就搞定了。这里用的是C# … PYTHON 里面好像直接用 TT_fonts 就好。挺牛B的
https://www.matools.com/code-convert-unicode 在线编码