常见的反爬+文字加解密

news2024/11/24 14:45:25

一、常见的反爬介绍

基于身份识别的反爬: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")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录联系ThinkPad T490扬声器无声音但插耳机有声音的解决办法

型号:联想ThinkPad T490,系统Win10 64位。 现象:扬声器无声音,插耳机有声音。且右下角小喇叭正常,设备管理器中驱动显示一切也都正常(无黄色小叹号)。 解决办法: 尝试了各种方法&a…

【机器学习Python实战】logistic回归

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习python实战 欢迎订阅!后面的内容会越来越有意思~ ⭐内容说明:本专栏主要针对机器学习专栏的基础内容进行python的实现,部分…

带你快速掌握Linux最常用的命令(图文详解)- 最新版(面试笔试常考)

最常用的Linux指令(图文详解)- 最新版 ls:列出目录中的文件和子目录。(重点)cd:改变当前工作目录。绝对路径:相对路径 pwd:显示当前工作目录的路径。mkdir:创建一个新的目…

盘点60个Python各行各业管理系统源码Python爱好者不容错过

盘点60个Python各行各业管理系统源码Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 源码下载链接:https://pan.baidu.com/s/1VdAFp4P0mtWmsA158oC-aA?pwd8888 提取码:8888 项目名…

c语言-浅谈指针(3)

文章目录 1.字符指针变量常见的字符指针初始化另一种字符指针初始化例: 2.数组指针变量什么是数组指针变量数组指针变量创建数组指针变量初始化例(二维数组传参的本质) 3.函数指针变量什么是函数指针变量呢?函数指针变量创建函数指…

C语言基本算法----冒泡排序

原理 冒泡排序就是对一个存放N个数据的数组进行N次扫描,每次把最小或者最大的那个元素放到数组的最后,达到排序的目的。 原理图解 冒泡排序过程分析 冒泡排序的执行过程 冒泡排序总结 在此感谢 冒泡排序法_哔哩哔哩_bilibili 这篇blog是对这位up此视…

二维码智慧门牌管理系统升级解决方案:门牌聚合,让管理更便捷!

文章目录 前言一、传统门牌管理系统的瓶颈二、地图门牌聚合展示的优势三、地图门牌聚合展示的实现方法四、智慧门牌管理系统的未来发展 前言 随着城市的发展和建设,对于地址信息的管理变得越来越重要。而智慧门牌管理系统作为管理地址信息的重要工具,其…

Linux--网络概念

1.什么是网络 1.1 如何看待计算机 我们知道,对于计算机来说,计算机是遵循冯诺依曼体系结构的(即把数据从外设移动到内存,再从内存到CPU进行计算,然后返回内存,重新读写到外设中)。这是一台计算机…

机器人走迷宫问题

题目 1.房间有XY的方格组成,例如下图为64的大小。每一个方格以坐标(x,y) 描述。 2.机器人固定从方格(0, 0)出发,只能向东或者向北前进,出口固定为房间的最东北角,如下图的 方格(5,3)。用例保证机器人可以从入口走到出口。 3.房间…

英伟达AI布局的新动向:H200 GPU开启生成式AI的新纪元

英伟达Nvidia是全球领先的AI计算平台和GPU制造商,近年来一直在不断推出创新的AI产品和解决方案,为各行各业的AI应用提供强大的支持。 最近,英伟达在GTC 2023大会上发布了一款专为训练和部署生成式AI模型的图形处理单元(GPU&#…

如何实现用户未登录不可访问系统

在开发web系统时,如果用户不登录,发现用户也可以直接正常访问系统,这种设计本身并不合理,那么我们希望看到的效果是,只有用户登录成功之后才可以正常访问系统,如果没有登录则拒绝访问。那么我们可以使用过滤…

回溯算法(3)--n皇后问题及回溯法相关习题

一、n皇后问题 1、概述 n皇后要求在一个nn的棋盘上放置n个皇后,使得他们彼此不受攻击,皇后可以攻击同一行、同一列、同一斜线上的敌人,所以n皇后问题要求寻找在棋盘上放置这n个皇后的方案,使得任意两个皇后都不在同一行、同一列或…

口袋参谋:一键下载任意买家秀图片、视频,是怎么做到的!

​对于淘宝商家来说,淘宝买家秀是非常的重要的。买家秀特别好看的话,对于提升商品的销量来说,会有一定的帮助,如何下载别人的买家秀图片,然后用到自己的店铺中呢? 这里我可以教叫你们一个办法!那…

ROS基础—关于参数服务器的操作

1、rosparam list 获取参数服务器的所有参数。 2、rosparam get /run_id 获取参数的值

【uniapp】使用扫码插件,解决uni.scanCode扫码效率低的问题

1. 背景 uniapp 中自带的二维码扫描的 API 是 uni.scanCode,但有如下问题: 二维码扫描的效率不高,有些需要扫2秒左右 较小或模糊的一些二维码无法识别出来,多次扫同样的一个码可能出现扫码失败的情况 受环境影响大&#xff0c…

腾讯云服务器怎么买便宜?腾讯云服务器新人专享限时特惠购买链接

腾讯云作为国内领先的云计算服务提供商之一,为个人用户和企业用户提供了多种优惠活动。这些活动不仅能帮助用户节省成本,还能提升企业的效益。本文将介绍腾讯云的多重优惠活动,让用户能够以更优惠的价格购买和续费云服务器。 腾讯云双十一领…

动手学深度学习——循环神经网络的简洁实现(代码详解)

文章目录 循环神经网络的简洁实现1. 定义模型2. 训练与预测 循环神经网络的简洁实现 # 使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, …

解决docker运行elastic服务端启动不成功

现象: 然后查看docker日志,发现有vm.max_map_count报错 ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 解决办法: 1. 宿主机(运行doc…

【springboot笔记】程序可用性检测ApplicationAvailability

1.背景 springboot-3.1.5 ApplicationAvailability LivenessState ReadinessState AvailabilityChangeEvent 我们可以通过ApplicationAvailability获取当前应用程序的可用性,这个可用性包括ApplicationContext和对外请求路由两种。 LivenessState 是表示Applicatio…

【C++】类与对象 II 【深入浅出 万字详解】

类与对象 II 一、类的6个默认成员函数二、构造函数前言:构造函数产生的由来 及引入C语言中关于初始化会出现的问题总结:(一)构造函数的 概念(二)构造函数的 特性★ 构造函数 和 函数声明 的区分 三、析构函…