常见的反爬+文字加解密

一、常见的反爬介绍

基于身份识别的反爬: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 requestsurl = "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 htmlurl = "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 etreeurl = "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 jsonurl = '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.hqwc.cn/news/189698.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1899A Game with Integers(思维题)

题目链接 题目 题目大意 t 组测试样例 每组给一个正整数 n, 有两种操作: 1-1 A 和 B 轮流操作, 如果这个整数变成了一个能被3整除的数,A赢,输出First 如果在10次操作以内,n不能被3整数,B赢&…

CF1899B 250 Thousand Tons of TNT

题目链接 题目 题目大意 T T T 组测试数据 每组 n n n 个货物,第 i i i 个货物 的重量是 a i a_i ai​ 用k辆货车按顺序装这些货物,条件是每辆车上的货物个数都一样,也即是说 n n n 必须能被 k k k 整除, 求任意两辆车货物总…

一起学docker系列之五docker的常用命令--操作容器的命令

目录 前言1 启动容器2 查看容器3 退出容器4 启动已经停止的容器5 重启容器6 停止容器7 删除已经停止的容器8 启动容器说明和举例9 查看容器日志10 查看容器内运行的进程11 查看容器内部细节12 进入正在运行的容器并进行交互13 导入和导出容器结语 前言 当涉及到容器化技术&…

如何在远程协同视频会议中确保安全性?

随着远程工作的普及,远程协同视频会议已成为企业和团队之间进行交流和协作的重要工具。与此同时,会议中的安全性问题也日益凸显。本文将介绍如何在远程协同视频会议中确保安全性,主要包括以下方面: 1、内网部署 将会议服务器部署…

python引入自己不同目录的模块

1.目录结构 from manual_data.utils import delete_and_insert_center

【Proteus仿真】【STM32单片机】公交车报站系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD12864显示模块、DS18B20温度传感器、DS1302时钟模块、按键、LED蜂鸣器、ULN2003、28BYJ48步进电机模块等。 主要功能: 系统运行…

学习css过渡动画-transition

文章目录 前言transition属性语法宽度改变效果透明度改变效果位置改变效果如有启发,可点赞收藏哟~ 前言 通常,当一个元素的样式属性值发生变化时,会立即看到页面发生变化。 css属性transition能让页面元素不是立即的、而是慢慢的从一种状态变…

Python | 机器学习之SVM支持向量机

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之SVM支持向量机概念 1.1 机器学习 1.2 SVM支持向量机 2. SVM支持向量机…

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2&#…

Go 语言数组基础教程 - 数组的声明、初始化和使用方法

数组用于在单个变量中存储相同类型的多个值,而不是为每个值声明单独的变量。 声明数组 在Go中,有两种声明数组的方式: 使用var关键字: 语法 var array_name [length]datatype{values} // 这里定义了长度 或者 var array_n…

Python入门学习篇(一)——注释变量输入输出

1 注释 1.1 作用 a 方便他人和自己阅读代码 b 告诉编译器这部分内容是不用执行的。1.2 单行注释 # 注释内容1.3 多行注释(引号) 1.3.1 三对双引号 """ 注释内容 """1.3.2 三对单引号 注释内容 1.4 pycharm快捷键使用 ctrl/ 多行注释(以# …

PPT基础入门

目录 相关设置快捷键shift 快捷键Ctrl 快捷键Ctrl Shift 组合快捷键快捷键总结 相关设置 设置撤回次数 自动保存 图片压缩 字体嵌入:目的是在不同的电脑上保留已经设置好的字体 多格式导出 (1)可以导出PDF (2)可以导…