常见的反爬+文字加解密

一、常见的反爬介绍

基于身份识别的反爬:1.User-agent 2.Referer 3.Captcha 验证码 4.必备参数

基于爬虫行为的反爬:1.单位时间内请求数量超过一定阈值 2.相邻两次请求之间间隔小于一定阈值3.蜜罐陷阱

通过对数据加密进行反爬:1.对文字加密 2.对请求参数加密 3.对响应数据加密

二、文字加解密

(一)常见文字加解密方式

1.通过对数据图片化进行反爬

2.对文字进行编码 unicode, HTML 字符实体

(二)二进制与十六进制

以下为用代码表示方法:

num = 20
# 16进制表示
print(hex(num))
# 二进制表示
print(bin(num))

num2 = 0b10001
print(num2)

num3 = 0xA2
print(num3)

(三)ASCII&UTF-8&Unicode编码

1.字符集:(1)每一个字符在计算机里都被保存为二进制的编码(2)成千上万组这种关系就组成了字符集

2.常见的字符集:ASCII,UTF-8,Unicode, GBK

3.ASCII:(1) English (2) 7-bits

# 转为ASCII编码形式
num = ord("A")
print(num)
# 查看二进制形式
print(bin(num))

# 传进去ASCII码转为字符
ch1 = chr(65)
print(ch1)

ch2 = chr(0b1000010)
print(ch2)

4.Unicode:(1) 世界各地语言 (2)固定长度, 2 bytes

5.UTF-8:(1)基于unicode编码的可变长度的格式 (2)1 bytes - 4 bytes

6.GBK:中文

(四)Python实现EncodeDecode编码转换

s1 = "中"
s2 = s1.encode("utf-8")
print(s2)
s3 = s1.encode("unicode-escape")
print(s3)

s4 = b'\xe4\xb8\xad'
# 将二进制的格式转成文字
s5 = s4.decode("utf-8")
print(s5)

s6 = b'\\u4e2d'
s7 = s6.decode("unicode-escape")
print(s7)

(五)破解Unicode与HTML字符实体加密

import requests

url = "http://127.0.0.1:5000/api/C12L06"
headers = {
    "User-Agent": "xxxxxxxxxxxxxx"
}
res = requests.get(url, headers=headers)
print(res.text)

# 进行解码
print(res.content.decode("unicode-escape"))

import requests
import html

url = "http://127.0.0.1:5000/api/C12L06b"
headers = {
    "User-Agent": "xxxxxxxxxxxxxx"
}
res = requests.get(url, headers=headers)
print(res.text)

# 进行解码
print(html.unescape(res.text))

(六)破解CSS偏移文字加密

import requests
from lxml import etree

url = "http://127.0.0.1:5000/C12L07"

headers = {

    "User-Agent":"xxx"
}

res = requests.get(url,  headers=headers)

mapping = {
    "0":"0",
    "-15px":"1",
    "-33px":"2",
    "-50px":"3",
    "-66px":"4",
    "-83px":"5",
    "-100px":"6",
    "-118px":"7",
    "-135px":"8",
    "-152px":"9"
}

tree = etree.HTML(res.text)
items = tree.xpath('/html/body/div/div/div[1]/div/@style')
number = ""
for item in items:
    value = item.split(" ")[1]
    value = mapping[value]
    number += value
print(number)

items2 = tree.xpath('/html/body/div/div/div[2]/div/@style')
number2 = ""
for item in items2:
    value = item.split(" ")[1]
    value = mapping[value]
    number2 += value
print(number2)

(七)实践:自如ZiRoom获取租房信息

上述图片右侧的红框是链接:点开链接为图片形式:

import requests
import re
from lxml import etree
import base64
import json

url = 'https://www.ziroom.com/z/'
headers = {
    "User-Agent":"xxxx"
}
res = requests.get(url, headers=headers)

tree = etree.HTML(res.text)
style = tree.xpath('/html/body/section/div[3]/div[2]/div[1]/div[2]/div[2]/span[2]/@style')[0]

exp = re.compile('background-image: url\((.*?)\)', re.S)
img_url = "https:"+exp.findall(style)[0]
img_res = requests.get(img_url, headers=headers)

with open('./C12LO8/img.png', 'wb') as f:
    f.write(img_res.content)

url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxx&client_secret=xxxxx"
    
payload = ""
headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
}
    
response = requests.request("POST", url, headers=headers, data=payload)
    
access_token = response.json()["access_token")

request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
f = open('./C12LO8/img.png', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    result = response.json()["words_result"][0]["words"]
    print(result)

mappings = {
    "-0px": result[0],
    "-21.4px": result[1]
    "-42.8px": result[2],
    "-64.2px": result[3],
    "-85.6px": result[4],
    "-107px": result[5],
    "-128.4px": result[6],
    "-149.8px": result[7],
    "-171.2px": result[8],
    "-192.6px": result[9]
}

items = tree.xpath('div[@class="Z_list-box"]/div')
for item in items:
    try:
        title = item.xpath('./div[@class="info-box"]//a/text()')[0]
        nums = item.xpath('.//span[@class="num"]/@style')
        price = ""
        for num in nums:
            price += mappings[num.split("background-position:")[1].strip()]
        print(title, price)
    except:
        print("bannar")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/159997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch:通过摄取管道加上嵌套向量对大型文档进行分块轻松地实现段落搜索

作者:VECTOR SEARCH 向量搜索是一种基于含义而不是精确或不精确的 token 匹配技术来搜索数据的强大方法。 然而,强大的向量搜索的文本嵌入模型只能按几个句子的顺序处理短文本段落,而不是可以处理任意大量文本的基于 BM25 的技术。 现在&…

Linux CentOS 8(DHCP的配置与管理)

Linux CentOS 8(DHCP的配置与管理) 目录 一、项目介绍二、DHCP服务简介三、DHCP工作原理四、配置DHCP服务4.1 项目配置准备4.2 dhcpd配置文件框架与参数说明4.3 登录客户机验证4.4 客户端IP地址的释放与重新申请4.5 保留特定IP地址 一、项目介绍 当计算…

使用Open3D库处理3D模型数据的实践指南

目录 引言 一、安装Open3D库 二、加载3D模型数据 三、处理3D模型数据 1、去除模型中的无效面 2、提取模型特征 四、存储处理后的3D模型数据 五、可视化处理后的3D模型数据 六、注意事项 结论 引言 在处理3D模型数据时,Open3D库是一个功能强大且易于使用的…

【Qt之QStandardItemModel】使用,tableview、listview、treeview设置模型

1. 引入 QStandardItemModel类提供了一个通用的模型,用于存储自定义数据。 以下是其用法:该类属于gui模块,因此在.pro中,需添加QT gui,如果已存在,则无需重复添加。 首先,引入头文件&#xff…

ARM 版 Kylin V10 部署 KubeSphere 3.4.0 不完全指南

前言 知识点 定级:入门级KubeKey 安装部署 ARM 版 KubeSphere 和 KubernetesARM 版麒麟 V10 安装部署 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名IPCPU内存系统盘数据盘用途ksp-master-1172.16.33.1681650200KubeSphere/k8…

hash 哈希表

哈希表是一种期望算法。 一般情况下,哈希表的时间复杂度是 O(1)。 作用 将一个复杂数据结构映射到一个较小的空间 0~N(10^5~10^6),最常用的情景:将 0~10^9 映射到 0~10^5。 离散化是一种及其特殊的哈希方式。离散化…

【SAP-ABAP】--MRKO隐式增强字段步骤

业务需求:给MRKO增加几个增强字段 给标准表进行增强 1.如果标准表或者结构,带CL_***,一般表示SAP预留的增强位置,可以 直接双击这个类型,点击创建,然后直接在预留的结构里面添加自己 需要增加的字段 2.如…

无线物理层安全大作业

这个标题很帅 Beamforming Optimization for Physical Layer Security in MISO Wireless NetworksProblem Stateme![在这里插入图片描述](https://img-blog.csdnimg.cn/58ebb0df787c4e23b0c7be4189ebc322.png) Beamforming Optimization for Physical Layer Security in MISO W…

wpf devexpress Property Grid创建属性定义

WPF Property Grid控件使用属性定义定义如何做和显示 本教程示范如何绑定WP Property Grid控件到数据和创建属性定义。 执行如下步骤 第一步-创建属性定义 添加PropertyGridControl组件到项目。 打开工具箱在vs,定位到DX.23.1: Data 面板,选择Prope…

Spring 如何自己创建一个IOC 容器

IOC(Inversion of Control),意思是控制反转,不是什么技术,而是一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 在传统的程序设计中,我们直接在对象内部通过new进行对象创建…

ssrf学习笔记总结

SSRF概述 ​ 服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 ​ 如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的…

新品首发 | HP1011:高性能双相交错 PFC 数字控制器

随着PFC技术的发展,不断有新型PFC拓扑结构提出,如单相PFC、交错并联 PFC、传统无桥PFC、图腾柱无桥 PFC等。交错Boost PFC系统不仅具有并联系统的所有优点,还能减少输入电流纹波,降低开关管的电流应力。在中大功率场所通常采用工作…

【汇编】栈及栈操作的实现

文章目录 前言一、栈是什么?二、栈的特点三、栈操作四、8086cpu操作栈4.1 汇编指令4.2 汇编代码讲解问题:回答: 4.3 栈的操作4.3 push 指令和pop指令的执行过程执行入栈(push)时,栈顶超出栈空间执行出栈(pop)时,栈顶超…

图像分类系列(四) InceptionV2-V3学习详细记录

前言 上一篇我们介绍了Inception的原始版本和V1版本:经典神经网络论文超详细解读(三)——GoogLeNet学习笔记(翻译+精读代码复现) 这个结构在当时获得了第一名,备受关注。但InceptionV1是比较复…

机器学习第4天:模型优化方法—梯度下降

文章目录 前言 梯度下降原理简述 介绍 可能的问题 批量梯度下降 随机梯度下降 基本算法 存在的问题 退火算法 代码演示 小批量梯度下降 前言 若没有机器学习基础,建议先阅读同一系列以下文章 机器学习第1天:概念与体系漫游-CSDN博客 机器学习…

随着大模型中数据局限问题的严峻化,向量数据库应运而生

向量数据库与亚马逊大模型 什么是向量数据库 向量嵌入(vector embedding)已经无处不在。它们构成了许多机器学习和深度学习算法的基础,被广泛运用于各种应用,从搜索引擎到智能助手再到推荐系统等。通常,机器学习和深度…

解析 Python requests 库 POST 请求中的参数顺序问题

在这篇文章中,我们将探讨一个用户在使用Python的requests库进行POST请求时遇到的问题,即参数顺序的不一致。用户通过Fiddler进行网络抓包,发现请求体中的参数顺序与他设置的顺序不符。我们将深入了解POST请求的工作原理,并提供解决…

使用requests库设置no_proxy选项的方法

问题背景 在使用requests库进行HTTP请求时,如果需要使用爬虫IP服务器,可以通过设置proxies参数来实现。proxies参数是一个字典,其中包含了爬虫IP服务器的地址和端口号。然而,当前的requests库并不支持通过proxies参数来设置no_pr…

DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

c题目9:证明1000以内的偶数可以写成两个质数之和

每日小语 心若没有栖息的地方,在哪都是流浪。——三毛 自己敲写 这里需要用到一个联系:oushuprime1prime2 这个问题在于将这个联系变换,用于让我们判断是否是质数,转换后可以方便清晰的理解,并且减掉一个变量。 这…