Python实现反爬虫

简介: Python实现反爬虫

环境

Python3.12

安装fastapi

pip install "fastapi[all]"

代码

from fastapi import FastAPI, Response
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/')
def index():
    resp = FileResponse('data.gz')
    resp.headers['Content-Encoding'] = 'gzip'  # 说明这是gzip压缩的数据,否则请求时是乱码
    return resp

VSCode选择编译器环境

Cmd+Shift+P选择 Python : Select Interpreter

运行服务

uvicorn server:app

Uvicorn 简介

uvicorn是一个基于asyncio开发的一个轻量级高效的web服务器框架

uvicorn 设计的初衷是想要实现两个目标:

使用uvloop和httptools 实现一个极速的asyncio服务器

实现一个基于ASGI(异步服务器网关接口)的最小应用程序接口。

目前支持http, websockets, Pub/Sub 广播,并且可以扩展到其他协议和消息类型。

安装使用

uvicorn 仅支持python 3.5.3以上版本,我们可以通过pip3来快速的安装。

压缩数据包

将文本文件压缩成gz压缩包

cat hello.txt | gzip > data.gz

客户端请求

import requests
resp = requests.get('http://127.0.0.1:8000/').text
print(resp)

不带resp.headers['Content-Encoding'] = 'gzip'时运行后乱码

带resp.headers['Content-Encoding'] = 'gzip' 时返回解析压缩包后的数据

使用压缩数据包原理

文本内容为192个1。相当于把192个字符压缩成了5个字符,压缩率高达97.4%。

可以把一个1GB的文件压缩成1MB,那么对服务器来说,仅仅是返回了1MB的二进制数据,不会造成任何影响。但是对客户端或者爬虫来说,它拿到这个1MB的数据以后,就会在内存中把它还原成1GB的内容。这样一瞬间爬虫占用的内存就增大了1GB。如果我们再进一步增大这个原始数据,那么很容易就可以把爬虫所在的服务器内存全部沾满,轻者服务器直接杀死爬虫进程,重则爬虫服务器直接死机。

mac命令

dd if=/dev/zero bs=1048576 count=1000 | gzip > boom.gz

执行完后生成的文件只有995K,

linux命令

# dd: 是一个命令行工具,用于转换和复制文件。这里用来生成一个特定大小的文件。
# if=/dev/zero: 指定输入文件(if代表input file)。/dev/zero是一个特殊的文件,读取会产生无限的零(\0字符)。
# bs=1048576: bs代表“block size”,即每个块的大小。1048576字节等于1MB。这意味着dd命令在每次读写操作中处理1MB的数据。
# count=1000: 这指定dd命令需要复制的块数。因为每个块是1MB,count=1000意味着总共复制1000MB,即1GB的数据。
# | gzip: 这个部分使用管道(|)将dd命令的输出直接传递给gzip命令,后者是一个压缩工具。这意味着生成的1GB数据会被gzip压缩。
# > boom.gz: 最后,>将压缩后的数据重定向到一个名为boom.gz的文件中。如果文件已经存在,它会被覆盖;如果不存在,则会被创建。
dd if=/dev/zero bs=1M count=1000 | gzip > boom.gz

把数据包换成boom.gz

import requests
import sys
resp = requests.get('http://127.0.0.1:8000/').text
print(sys.getsizeof(resp)/1024/1024+"GB")

请求期间可以看到内存在持续的增加

浏览器直接请求http://127.0.0.1:8000/

这样在确定爬虫IP的时候拦截请求把请求重定向到这个地址即可.

来源: https://mp.weixin.qq.com/s?__biz=MzIxODg1OTk1MA==&mid=2247532470&idx=2&sn=fa2ffd45539f406af5db1aed7bbfc4ad&chksm=968d5f85be7938d054924240570270804ad5dd1ce6f6d36304f731679e5175d56a0e55b5a616&scene=132&exptype=timeline_recommend_article_extendread_samebiz&show_related_article=1&subscene=21&scene=132#wechat_redirect

相关文章
|
1月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
2月前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
2月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
117 6
|
7天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
8天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
17天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
22天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
29天前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。