首页 > 编程语言 >python学习之-加密字体反扒

python学习之-加密字体反扒

时间:2023-04-17 12:04:57浏览次数:38  
标签:加密 python text E6% sxs 反扒 import csv data

# coding = utf-8

'''
# 获取实习僧招聘信息
# (https://www.shixiseng.com/interns?page=2&type=intern&keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&area=&months=&days=°ree=&official=&enterprise=&salary=-0&publishTime=&sortType=&city=%E5%85%A8%E5%9B%BD&internExtend=)
# 获取前5页全部数据存储csv文件
'''
import csv
import io
import json
import re

import crawles
import fontTools.ttx
import requests
from fontTools.ttLib import TTFont

url = 'https://www.shixiseng.com/app/interns/search/v2'

cookies = {
    'utm_source_first': 'PC',
    'utm_source': 'PC',
    'utm_campaign': 'PC',
    'Hm_lvt_03465902f492a43ee3eb3543d81eba55': '1681560188',
    'RANGERS_WEB_ID': '7147610799707866638',
    'RANGERS_SAMPLE': '0.31832347309583',
    'adCloseOpen': 'true',
    'position': 'pc_search_syss',
    'Hm_lpvt_03465902f492a43ee3eb3543d81eba55': '1681560491',
}

headers = {
    'authority': 'www.shixiseng.com',
    'accept': 'application/json, text/plain, */*',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cache-control': 'no-cache',
    'content-type': 'application/x-www-form-urlencoded',
    'pragma': 'no-cache',
    'referer': 'https://www.shixiseng.com/interns?keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&city=%E5%85%A8%E5%9B%BD&type=intern',
    'sec-ch-ua': '\\',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '\\',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}

params = {
    'build_time': '1681560501489',
    'page': '{page}',
    'type': 'intern',
    'keyword': '数据挖掘',
    'area': '',
    'months': '',
    'days': '',
    'degree': '',
    'official': '',
    'enterprise': '',
    'salary': '-0',
    'publishTime': '',
    'sortType': '',
    'city': '全国',
    'internExtend': '',
}
#存储文件
csv_file = open('sxs_info.csv', 'w+', encoding='gbk', newline='')  # 文件存储
csv_f = csv.writer(csv_file)
csv_f.writerow(['岗位', '日薪', '行业', '公司名称', '地点时间', '工作描述', '内容描述', ])


# 请求网页数据解密返回输出
def sxs_get(page):
    response = crawles.get(url, headers=headers, params=params, cookies=cookies)
    text = response.text
    # print(text)

    #  查看内容
    # for i in response.json['msg']['data']:
    #     print(i)
    # 获取字体地址解析地址保存xml文件
    font_url = 'https://www.shixiseng.com/interns/iconfonts/file'
    ttf = TTFont(io.BytesIO(requests.get(font_url).content))
    # ttf.saveXML('sxs.xml') #首次运行打开

    # 对文件读取
    f = open('sxs.xml', 'r+', encoding='utf-8')
    sxs_data = f.read()  # 读取sxs文件存放到sxs_data
    f.close()
    # 用re取文件里面的编码及索引
    grapy = re.findall('<map code="0x(.*?)" name="(.*?)"/>', sxs_data)  # 取数字及汉字对应编码
    sequence = re.findall(' <GlyphID id="(\d+)" name="(\w+)"/>', sxs_data)  # 取编码对应的索引

    grapy_dict = {k: v for k, v in grapy}
    sequence_dict = {k: v for v, k in sequence}

    str_data = '0123456789一师x会四计财场DHLPT聘招工d周L端p年hx设程二五天tXG前KO网SWcgkosw广市月个BF告NRVZ作bfjnrvz三互生人政AJEI件M行QUYaeim软qu银y联'
    str_list = [' ', ''] + [i for i in str_data]  # 第一个没有,第二个空 加入字符列表

    # 对数据进行关联放入字典里,按照下面逻辑进行匹配
    #  -> 0xe283 -> uni30 -> 数据索引 -> 文字
    grapy_dict = {f'&#x{k}': str_list[int(sequence_dict[v])] for k, v in grapy}
    # print(grapy_dict)
    # 对文件进行解码
    for k, v in grapy_dict.items():
        text = text.replace(k, v)

    # 将解密后的数据转换回去
    data_list = json.loads(text)['msg']['data']
    # print(data_list)
    for i, d in enumerate(data_list):
        print(i + 1, f"岗位:{d['name']},日薪:{d['minsal']}-{d['maxsal']}/'天',"
                     f"行业:{d['industry']}/{d['scale']},公司名称:{d['cname']}"
                     f"地点时间:{d['city']}|{d['day']}天/周|{d['month_num']}个月,"
                     f"描述1:{d['i_tags']}, 描述2:{d['c_tags']}"
              )
        sxs_data = d['name'], d['minsal'] + '-' + d['maxsal'] + '/' + '天', d['industry'] + '/' + d['scale'], d['cname'], \
                   d['city'] + '|' + d['day'] + '天/周' + '|' + d['month_num'] + '个月', d['i_tags'], d['c_tags']

        # 文件写入
        csv_f.writerow(sxs_data)


for p in range(1, 6):  # 循环翻页取前5页数据
    print(f'爬取第{p}页...')
    print('-' * 50)
    sxs_get(p)
csv_file.close()

标签:加密,python,text,E6%,sxs,反扒,import,csv,data
From: https://blog.51cto.com/u_15791586/6194888

相关文章

  • 技术老鸟告诉你Python为什么能一跃成为世界排名第一的语言
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!作者:大周|慕课网讲师一、前言本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么要学,希望能够给看到此文章的同学一点建议,树立学习目标,让学习有结果。读完后,相信你一......
  • 记录selenium,python自动化测试中的chromedriver.exe地址和打开后自动关闭浏览器问题
    selenium的官方地址为:https://selenium-python.readthedocs.io/index.html镜像地址:https://npmmirror.com/#导入webdriverfromseleniumimportwebdriverfromselenium.webdriver.common.byimportBy#调用键盘按键操作时需要引入的Keys包fromselenium.webdriver.common.k......
  • [python] Python枚举模块enum总结
    枚举是一种数据类型,在编程中用于表示一组相关的常量。枚举中的每个常量都有一个名称和一个对应的值,可以用于增强代码的可读性和可维护性。在Python中,枚举是由enum模块提供的,而不是Python提供专用的枚举语法。关于enum模块介绍见:enum。如需详细了解Python的enum模块,参见文章:Python......
  • python代码:基于强化学习的智能电网的动态定价方法
    python代码:基于强化学习的智能电网的动态定价方法摘要:提出了一种考虑服务提供商(SP)利润和用户(CUs)成本的分级电力市场中能量管理的动态定价DR算法。使用强化学习(RL)描述分层决策框架,将动态定价问题描述为离散有限马尔可夫决策过程(MDP),并采用Q学习求解该决策问题。使用RL,S......
  • python报错:divide by zero encountered in log
    原因:数字太小的原因,溢出,计算过程中出现-inf,再做其他运算,结果还是-inf。当概率很小时,取对数后结果趋于负无穷大解决:改变浮点数的精度参考:(51条消息)RuntimeWarning:dividebyzeroencounteredinlog错误解决_旅途中的宽~的博客-CSDN博客......
  • 关于Python爬虫使用技巧
    首先,Python是一种非常流行的编程语言,拥有广泛的应用领域,例如数据分析、人工智能、Web开发等。如果您是初学者,可以开始学习基础的语法和概念,例如变量、数据类型、循环、函数等等。许多在线资源可以提供学习资料。其次,Python拥有大量的第三方库和框架,可以帮助您提高开发效率并处理......
  • Python哪种方式循环最快
    众所周知,Python不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为1个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。while和for是Python中常用的两种实现循环的关键字,它们的运行效率实际上是......
  • python3-list
    1、介绍builtins.py文件中定义了list类,用于处理python中列表数据。list也是python的基本数据类型之一。列表是单列的元素集合,用[]包围,内部元素之间用,分隔列表的元素可以是任意类型,且某一列表中可以同时包含不同类型列表支持元素的增删改列表支持数值索引元素不会进行默认......
  • python3-tuple
    1、介绍builtins.py文件中定义了tuple类,用于处理python中元组数据。tuple也是python的基本数据类型之一。元组是单列的元素集合,用()包围,内部元素之间用,分隔元组的元素可以是任意类型,且某一元组中可以同时包含不同类型元组定义后不支持对容量和元素的修改元组支持数值索引......
  • python3-set
    1、介绍builtins.py文件中定义了set类,用于处理python中集合数据。set也是python的基本数据类型之一。集合是单列的元素集合,用{}包围,内部元素之间用,分隔集合的元素可以是任意类型,且某一集合中可以同时包含不同类型集合定义后可以进行增删改集合不支持数值索引set是无序集......