加密文件通过base64加密,先拿到加密字符串,通过base64解密,保存成woff文件
利用fonttool把woff文件保存成xml文件,再开始分析真实数据与加密数据的动态映射关系

映射关系如下:
源码数据:&#x…; === 解密后的数据:uni…
解密后的数据会根据网页的刷新不停的变化,所以要找到一个不变的映射关系
寻找不变的映射关系如果自己找的话可能会浪费很长时间,这里直接告诉大家结果
源码数据:&#x…; === 解密后的数据:uni… === xml文件中的前两个x,y坐标差值。

源码如下 ,如果还看不懂的同学可以到我的B站教学视频,过程非常详细。
B站up主:一只会唱歌的程序狗 里面有的一期视频:字体加密-58同城简历信息爬取

import requests
import re
import base64
from lxml import etree
from fontTools.ttLib import TTFont
from io import BytesIO

data_map = {(0, 1549): ‘B’, (1588, 0): ‘男’, (868, 0): ‘王’, (825, 367): ‘大’, (265, -118): ‘专’, (0, 1026): ‘M’,
(-110, -150): ‘女’, (1460, 0): ‘吴’, (230, 390): ‘硕’, (156, 262): ‘赵’, (660, 0): ‘黄’, (924, 0): ‘李’,
(0, 1325): ‘1’, (0, 134): ‘8’, (0, 144): ‘经’, (0, 125): ‘2’, (1944, 0): ‘下’, (-52, -52): ‘本’, (582, 0): ‘届’,
(0, -227): ‘5’, (146, 78): ‘应’, (228, 306): ‘科’, (-244, -426): ‘7’, (770, 0): ‘中’, (928, 0): ‘生’,
(-121, 62): ‘6’, (-833, 0): ‘E’, (299, 0): ‘陈’, (159, -123): ‘3’, (164, 0): ‘以’, (-764, 0): ‘杨’,
(-221, 0): ‘A’, (238, 0): ‘张’, (0, -1023): ‘4’, (784, 0): ‘无’, (0, 410): ‘0’, (128, -74): ‘9’,
(-46, -550): ‘验’, (0, 110): ‘博’, (0, 132): ‘技’, (746, 0): ‘士’, (210, 358): ‘校’, (1298, 0): ‘高’,
(-74, -366): ‘刘’, (0, -508): ‘周’}

def get_font_map(content):
font_map = {}
result = re.search(r"base64,(.*?))", content, flags=re.S).group(1)
b = base64.b64decode(result)
tf = TTFont(BytesIO(b))
# print(tf.getGlyphNames())
# 运行三遍分别保存字体库01、02、03用来做分析
with open(“ztku01.woff”, “wb”)as f:
f.write(b)

fonts = TTFont("ztku01.woff")
fonts.saveXML("ztku01.xml")
for index, i in enumerate(tf.getGlyphNames()[1:-1]):temp = tf["glyf"][i].coordinatesprint(temp)x1, y1 = temp[0]x2, y2 = temp[1]new = (x2 - x1, y2 - y1)key = i.replace("uni", "&#x").lower()# key = key.encode('utf-8').decode('unicode_escape')font_map[key] = data_map[new]
print(font_map)
return font_map

def parse_html():
url = “https://sz.58.com/searchjob/”
header = {
‘accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3’,
‘accept-encoding’: ‘gzip, deflate, br’,
‘accept-language’: ‘zh-CN,zh;q=0.9,en;q=0.8’,
‘cache-control’: ‘max-age=0’,
‘upgrade-insecure-requests’: ‘1’,
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36’,
}
response = requests.get(url, headers=header)
html = response.text
font_map = get_font_map(html)
for i in font_map:
print(i+";")
html = html.replace(i + “;”, font_map[i])
print(html)
data = etree.HTML(html)
personal_information = data.xpath(’//div[@id=“infolist”]/ul/li//dl[@class=“infocardMessage clearfix”]’)
for info in personal_information:
# 姓名
name = info.xpath(’./dd//span[@class=“infocardName fl stonefont resumeName”]/text()’)[0]
# 性别
gender = info.xpath(’./dd//div[@ class=“infocardBasic fl”]/div/em[1]/text()’)[0]
# 年龄
age = info.xpath(’./dd//div[@ class=“infocardBasic fl”]/div/em[2]/text()’)[0]
# 工作经验
work_experience = info.xpath(’./dd//div[@ class=“infocardBasic fl”]/div/em[3]/text()’)[0]
# 学历
education = info.xpath(’./dd//div[@ class=“infocardBasic fl”]/div/em[4]/text()’)[0]
print(name, gender, age, work_experience, education)

if name == “main”:
parse_html()

字体加密-58同城简历信息爬取相关推荐

  1. python可以爬取58同城代码_爬取58同城—字体反爬

    我爬取的是58同城北京租房的索引页. url:https://bj.58.com/chuzu/?PGTID=0d100000-0000-1e00-4039-99b26a4fedeb&Click ...

  2. python爬取58同城二手房_爬取厦门58同城二手房数据进行数据分析(二)

    一.前言 书接上文: Zachary:爬取厦门58同城二手房数据进行数据分析(一)​zhuanlan.zhihu.com 这一篇主要对上一篇文章爬取下来的数据进行一些探索性分析和可视化,并且建立一个简 ...

  3. python爬取58同城租房信息_分页爬取58同城租房信息.py

    import requests,re,openpyxl,os headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleW ...

  4. 简历爬取系列(二)——破解58同城简历中的加密字符

    直接目的:针对58同城简历数据中的加密字符,进行破解,以还原其对应的真实文字. 根本目的:爬取58同城网站上的个人简历,进行信息储备. 现有环境:安装python3.6的五服务器. 下面就开始吧. 如 ...

  5. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  6. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  7. (64)-- 爬取58同城网页信息

    # 爬取58同城租房信息 from lxml import etree import requestsbase_url = 'http://bj.58.com/chuzu/?utm_source=ma ...

  8. 多线程爬取58同城二手车信息

    多线程爬取58同城二手车信息 目录 多线程的介绍 数据的爬取 数据的解析 多线程 简介:线程是轻量级的进程,是程序执行流的最小单元,它不拥有系统的资源,运行占用独立的资源且资源小,且多个线程共享一个单 ...

  9. 超星系统登录,信息爬取

    超星系统登录,信息爬取 经历过上一年的疫情的大学生,一部分大学生可能对超星有一个深刻的认识,而我写这个项目的想法来自我的导师,做一个可以爬取超星课程学生成绩,可以随机组卷(前提是自己题库里有题),该项 ...

最新文章

  1. CVPR 2021 | 利用时序差分进行动作识别的最新Backbone—TDN
  2. java 基础api实现上传,上传文件到7牛云存储的java api一个简单的demo实现
  3. 剑指Offer(java版):第一个只出现一次的字符
  4. 连接CPU和计算机的总线,什么是计算机总线 总线和接口的区别
  5. UVa 439 - Knight Moves
  6. Flowmill :为分布式应用程序世界构建的网络可观察性解决方案
  7. geexbox 编译
  8. 纽微特反省:经常跑同一个客户,也没新东西看
  9. C++实现H264文件解析
  10. 能源消耗总量计算公式_七、能源统计(21)
  11. 数字电路技术可能出现的简答题_数字电路复习题一简答题
  12. SVN相关问题(svn:E175002错误)的解决方案
  13. 取消计算机用户密码页面,取消开机密码 Windows电脑开机登录界面取消方法-电脑教程...
  14. xpath定位元素详解
  15. Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value动态更新
  16. 项目管理培训的一些总结
  17. 用C语言中的结构体实现简单的学生成绩管理系统
  18. BIOS设置通电开机?请问高手怎么设置?
  19. 201571030337/201571030327——《小学生四则运算》结对项目报告
  20. 用html编写诗句春晓,唐诗与灯谜1:《春晓》

热门文章

  1. 唐尼vr眼镜好吗_VR怎么看电影?手把手教你用VR眼镜设备看电影的方法
  2. 看雪3万课程笔记-Frida 辅助分析ollvm字符串加密(一)
  3. 4.试用期个人工作总结(篇四)
  4. 英语学习案例分析APP 201421123108 王坤彬
  5. 机器学习期末简答总结
  6. 手机费用查询2007.3~7
  7. UnityStandardAsset工程、源码分析_5_赛车游戏[AI控制]_AI机制
  8. (读书笔记)中级语法-简单句和复杂句
  9. SAP PP模块常用事务代码
  10. 软工小队第二次会议 4-23