网页抓取 加密html(Python学习资料分析XX点评数据的对应关系及乱码与数字)

优采云 发布时间: 2022-02-04 07:07

  网页抓取 加密html(Python学习资料分析XX点评数据的对应关系及乱码与数字)

  PS:如需Python学习资料,可点击下方链接自行获取

  

  大家爬取分析XX评论数据,最常见的无外乎两种:

  1、分析所有店铺的各种评分和推荐菜品2、获取店铺评论数据

  而大众点评最大的问题就是字体加密,仅此而已

  

  显然,大众点评宁愿误杀一万也不愿放过一个,干脆用自己定义的字体。但是,由于字体是自定义的,所以网页必须需要加载字体文件。

  谷歌浏览器,右键查看,进入网络刷新页面,点击字体。

  

  让我们下载这个加载的字体:8f8cfde4.woff

  右键复制类似地址

  粘贴到新页面下载

  将下载好的字体导入FontEditor打开(百度的在线字体编辑器)

  

  导入后:

  

  然后我们结合网页的源码,得到对应的乱码和数字的对应关系:

  

  我们可以发现网页中的乱码与FontEditor中乱码的后四位是一样的。例如图片中某店铺的评论数为2481条,在网页源码中用[1]表示。这是 FontEditor 的字体。编辑器中对应的是[unie801, unieb78, uniefe4]。

  所以我们要做的是:

  1、下载网站字体包2、将字体包导入FontEditor,观察乱码与数字的关系 乱码组成字典

  def get_font():

font = TTFont('8f8cfde4.woff')

font_names = font.getGlyphOrder()

# 这些文字就是在FontEditor软件打开字体文件后看到的文字名字

texts = ['','','1','2','3','4','5','6','7','8','9','0']

font_name = {}

# 将字体名字和它们所对应的乱码构成一个字典

for index,value in enumerate(texts):

a = font_names[index].replace('uni', '&#x').lower() + ";"

font_name[a] = value

return font_name

  运行

  是的,这与刚刚观察到的结果一致。

  然后我们获取网页的源代码,根据get_font()形成的字典进行替换。

  import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}

cookies = {'cookie':'你的cookies'}

url = 'http://www.dianping.com/beijing/ch10/g110p1'

html = requests.get(url, headers=headers,cookies = cookies).text

#requests获得html

num = get_font()

#获得加密映射关系

for key in num:

if key in html:

html = html.replace(key, str(num[key]))

#替换html中加密文字

  再看一下结果:

  

  这样,大众点评的字体加密就被破解了。

  其他人可以使用自己喜欢的解析方法来解析 html。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线