反爬虫之有个操作也许可以检测aiohttp、httpx,requests也尴尬?

Python网络请求优化实战:破解12306反爬虫机制与模拟真人行为 网络爬虫技术是自动化获取公开网络数据的重要手段,其核心原理在于模拟浏览器发送HTTP请求并解析响应。在数据采集与自动化测试领域,优化网络请求的稳定性与拟真度具有极高的技术价值,尤其是在面对如12306这类具备复杂反爬虫体系的高并发应用场景时。这类系统通常采用前端JavaScript加密、请求指纹分析、IP频率限制等多维防御策略,例如热词中提到的“认证失败2006”错误码和“RAIL_DEVICEID”等关键Cookie,就是反爬机制触发的典型表现。为了有效应对,工程师需要深入理解HTTP协议、会话管理及浏览 阅读详情

前言


最近行业市场不太景气啊,趁着有时间多学学吧,武装自己,等机会
刚好,发现一个很6的东西。这个问题是在差不多半个月前,群友 @十一 发现的,然后在群里跟大家讨论。


这个网站,请求的时候,requests正常:

原始的curl也可以:

aiohttp,直接报错

httpx,也直接报错:

不过httpx的报错要明显点,这就进入了有意思的环节

分析



看到这里,估计就有朋友开始冷笑了:搞爬虫大部分不都用requests的吗,谁会用httpx和aiohttp这些啊,感觉这个是不是没啥用啊。
别急,朋友,在文章的下面会说这个,当然如果你赶时间或者觉得没啥意思,那就没必要浪费时间继续看了

1.httpx


拿着上面的报错,去网上搜,找到如下issues:

https://github.com/encode/httpx/issues/1561

https://github.com/encode/httpx/issues/1363



看完里面各位大佬的一顿分析,说是hyper库的问题:

然后hyper库的开发者,如下链接回复:

Should we support looser header name validation? · Issue #113 · python-hyper/h11 · GitHub

大概意思是这个不是一个问题,而是http请求的严格性判断问题,请求头的协议,按国际标准,是不能出现 “[Cache-Control]” 这种带有特殊符号作为响应头的键名的,所以报错
而requests却可以,或许是因为requests的校验不严格,直接就放过了:

而,浏览器访问也是可以的:

那么我个人就有理由认为

这是一个bug,httpx和aiohttp都存在的bug

 

httpx的作者,对这个问题那段时间确实在尝试解决,github机器人都想关闭了,httpx作者还不想放弃:

且至今没解决,遇到的人还不少,至少,上个月都还有人在说这个问题

  

卧槽,这时间,上周都还有人在问啊:

其中也有说解决办法,看到有个老哥说改h11的源码,改成这样:

但是报错依然在

另外有个老哥说了这个方法:

h11.readers.header_field_re = re.compile(b"(?P<field_name>[-!#$%&'*+.^`/|~0-9a-zA-Z]+):[ \t](?P<field_value>([^\\x00\\s]+(?:[ \t]+[^\\x00\\s]+))?)[ \t]*")

我把这个代码直接放我代码里,报错了,根本没有这个属性

经过一顿查阅,他换了个属性名,是这个:

import h11from h11 import _readersimport re

h11._readers.header_field_re = re.compile(b"(?P<field_name>[-!#$%&'*+.^`/|~0-9a-zA-Z]+):[ \t](?P<field_value>([^\\x00\\s]+(?:[ \t]+[^\\x00\\s]+))?)[ \t]*")

  

但是我试了,换成了新的报错:

也许是正则表达式写的不完美:

正则表达式通用匹配一下,然后就可以了:

import httpximport h11from h11 import _readersimport re

# h11._readers.header_field_re = re.compile(b"(?P<field_name>[-!#$%&'*+.^`/|~0-9a-zA-Z]+):[ \t](?P<field_value>([^\\x00\\s]+(?:[ \t]+[^\\x00\\s]+))?)[ \t]*")

h11._readers.header_field_re = re.compile(b"(?P<field_name>.*?):[ \t](?P<field_value>.*?)")

headers = {  

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
}
url = 'https://scanstatus.sxxxxx'
# url = 'https://club.xxxxxx/thread-26829078-1-1.html'

resp = httpx.get(url=url, headers=headers)

print(resp.text)

  


但是,我换了一个网站,也就是那个issue里某华某为的社区地址,不出正常的结果:

所以,修改正则表达式并不是一个通用的方案。

插一句,在请求的时候,就不要开代理或者抓包软件了,不然他报错更奇怪:

综上所述,也就是,只要服务器的返回头埋的坑够多,这个方法根本无法完美解决

那么这个问题,httpx作者就给了个这个解释就没下文了

 https://github.com/encode/httpx/issues/767#issuecomment-1367498458

就这么不了了之了。。。

因为根据http协议的响应头原理,确实不会出现这种不标准的字段

更官方的解释可以去查查http协议原理,或者看看以下资料:

  https://zh.wikipedia.org/zh/HTTP%E5%A4%B4%E5%AD%97%E6%AE%B5https://developer.mozilla.org/zh-CN/docs/Web/API/Headerhttps://developer.mozilla.org/zh-CN/docs/Glossary/Response_header


我的理解如下:
 

客户端需要先解析响应头,通过响应头的一些规范来解析返回的响应体的,既然你响应头都报错了,那后续的响应体解析自然也不会往下走了,直接报错退出。

2.aiohttp

对于aiohttp来说,像上面那么加正则表达式是无效的:

改完发现并没有用

这有说,改成1,也试了,不行

更多的就不演示了

反正就是一顿查找,发现aiohttp上并没有合理方案解决

针对的解决方案

1.用requests


上面有了,这里就不展示了

但是requests我们知道,它是不支持http2.0协议的

2.用正则表达式替换


上面也有了,这里不贴了但是不能完美覆盖后续的响应头特殊参数
 

3.用urllib3处理


这个库用的倒不多,可以直接请求:

但是他也是个可以直接拿来请求的库,相比requets,那很多功能还是没有。其实requests本质就是借助了urllib3库的
所以,这个库,不出意外应该也是不支持http2.0的

用非常规的请求库尝试 


既然目前的方法,除了requests/urllib3,其他都不行,那我在这个基础之上,强制http2,是不是就可以干掉requets库了,python的常规请求库直接无可用的,直接干死这些爬虫?

想的挺美的

1.用tls-client试试

虽然他是用来对抗tls的,试试呢:
 

可行。为啥,因为他原理就是完全模拟浏览器,大概看了它的源码,用curl_impersonate库,打包成了一个dll(具体怎么打包的不可知,这部分没开源,插一句,据群友反馈,也是因为这个dll,会导致内存泄漏),然后可以直接用,上面说过了,浏览器可以访问,那这个库肯定也可以访问了

那么测试那个某为的网址:
 

不行,被识别了,牛吧,还是得是某为啊

2.用curl_cffi试试

测试那个某为的网址:
 

这么对比,看来curl_cffi才是获胜者啊,只能说,牛逼啊!!!

 

实现一个anti aiohttp、httpx的服务


简单的用fastapi 实现一个简单的服务,设置了下响应头:
 

1.用httpx请求

httpx代码不变,只是把url换了,果然报错
 

2.用aiohttp请求

再来看aiohttp,果然报错,哈哈哈哈

2.用http.client请求

3.用urllib3、requests测试

还得是这哥俩啊,直接能跑

4.用node的request请求看看

刺激,也给防住了。
 

5.用golang 看看


刺激啊,也没有正常返回

6.用postman看看

postman也直接无返回

7.用安卓看看

  

package com.geek.spiderclient;



import androidx.appcompat.app.AppCompatActivity;



import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.URL;



public class MainActivity extends AppCompatActivity {

    private TextView textView;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.hello);



        new Thread(new Runnable() {

            String result = "";



            @Override

            public void run() {

                try {

                    String url_string = "http://192.168.30.251:8000/";// 由于高版本有https的限制,需要修改targetSdk为27及一下。

                    URL url = new URL(url_string);

                    //得到connection对象。

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    //设置请求方式

                    connection.setRequestMethod("GET");

                    //连接

                    connection.connect();

                    //得到响应码

                    int responseCode = connection.getResponseCode();

                    Log.d("headers", "" + connection.getHeaderFields());

                    if (responseCode == HttpURLConnection.HTTP_OK) {

                        //得到响应流

                        InputStream inputStream = connection.getInputStream();

                        //将响应流转换成字符串

                        result = is2String(inputStream);//将流转换为字符串。

                        Log.d("result", "result=============" + result);

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                }

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        Log.e("result", "runOnUiThread");

                        textView.setText(result);

                    }

                });

            }

        }).start();

    }



    public String is2String(InputStream is) {

        //连接后,创建一个输入流来读取response

        BufferedReader bufferedReader = null;

        try {

            bufferedReader = new BufferedReader(new InputStreamReader(is, "utf-8"));

            String line = "";

            StringBuilder stringBuilder = new StringBuilder();

            String response = "";

            //每次读取一行,若非空则添加至 stringBuilder

            while ((line = bufferedReader.readLine()) != null) {

                stringBuilder.append(line);

            }

            //读取所有的数据后,赋值给 response

            response = stringBuilder.toString().trim();

            return response;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

}



打包好之后:

安卓是可以的


再来看看服务端这边,其实是有正常请求的,但是客户端那边无法正常解而已。


那么有朋友估计有想法,那既然报错,我捕获异常强制打印结果不行吗?
这里还是用回到python httpx库试试

不行的哈哈,原因前面说过了

配置将服务强制http2.0协议

1.配置服务端

说干就干,准备尝试把代码移植刀服务器上,直接启动这边的服务,然后nginx搭建好,配置好http2,我买的服务器它默认没给开80和443等常规的库,问了客服说要申请备案了才行,卧槽,很迷,无所谓,我把这个服务搭建到6363端口上:


nginx如下配置:

server {

      # listen 6363;

      listen [::]:6363 ssl  http2; # managed by Certbot

      listen 6363  ssl http2; # managed by Certbot

      ssl_certificate /root/cert.pem; # managed by Certbot

      ssl_certificate_key /root/key.pem; # managed by Certbot

      if ($server_protocol !~* "HTTP/2.0") {

        return 444;

      }

      root /data/www/fast-tortoise;

      server_name 0.0.0.0;

      location / {

            proxy_set_header x-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header Host $http_host;

            proxy_pass http://127.0.0.1:8000/; # gunicorn绑定的fastapi的端口号

        }

      # 配置static的静态文件:

      location ~ ^\/static\/.*$ {

            root /data/www/fast-tortoise/static;

         }

}

  

 


证书文件用以下命令生成即可:前提得安装openssl库

  

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes


 

2.请求测试


配置好了之后,首先requests肯定是不行了,因为不支持http2.0。这里就不演示了。

用httpx测试下,唉?直接就给放行了


卧槽?反爬虫路途创业未半中道崩卒....
.....

看来http2.0把这个问题修复了呀......

......
那就只能在http1.0,http1.1下防住一部分的爬虫了

那有朋友估计要问了,你这个操作,好像只是有点奇怪,但实际并没有文章标题说的那么邪乎啊,说直接点,基本没啥用啊

解惑


如果坚持看到这里的朋友,还没有忘记前面说的有关requests问的话。ok,这里开始说说。
其实我一开始发现这个所谓的bug的时候,感觉也不是太有用,requests都能跑,没把requests防住,那肯定没啥意思啊。
那么这个所谓的bug,真的没用吗?
只是这一个的话肯定防不住的,可以用来跟其他反爬手段组合啊,比如tls指纹,或者其他的风控检测手段等等的。

其实,我在发这篇文章之前,也开发了两个爬虫练习题


第一题就是这个bug
第二题是另外一个检测手段,可以检测到requests和httpx,tls-client,curl_cffi,aiohttp,还有常规的请求软件,而且没有用到tls指纹。


本来说是先让群友拿来玩,然后过几天发文章公开检测手段以及如何bypass的。


我没想到,我还没发多久,就有 intellectual disability 搞我服务器.....
顿时就觉得没意思了,服务关了,第二题的检测手段和bypass的方法我也不打算公开了。由于这篇文章之前就答应过群友 @十一,且早就写好了,那就继续发吧。


想知道第一种检测手段,还有哪些特殊字符不能被正常解析吗?

有想知道第二种检测手段的朋友?


可以时不时的关注我的动向,也许我会在某一天用新的形式发出来

结语


爬虫的核心,还是指纹等静态特征完全的模拟浏览器环境,行为等动态特征完全的模拟人为操作

 

搜ID:geekbyte

curl_cffi实战:绕过TLS与HTTP/2指纹识别,实现高效网页抓取 在网络安全与数据采集领域,客户端指纹识别已成为现代反爬虫技术的核心防线。其原理在于服务器通过分析TLS握手过程中的ClientHello消息(包含加密套件列表、扩展顺序等特征)以及HTTP/2协议的SETTINGS帧等底层网络行为,精准区分浏览器与自动化脚本。这项技术的价值在于能有效拦截传统爬虫库(如requests、aiohttp)的请求,保障网站数据安全。对于需要大规模、稳定获取公开数据的应用场景,例如构建AI编程助手、知识库检索增强生成(RAG)系统或市场数据分析平台,突破指纹封锁是技术实现的前提。本 阅读详情

相关推荐

Python全栈反爬虫攻防:从JS逆向到分布式架构的实战解析

在当今的Web开发与数据采集领域,反爬虫技术已成为保护数据安全的关键防线。其核心原理在于通过客户端环境检测、请求验证和行为分析,区分真实用户与自动化程序。理解这套机制的技术价值在于,它不仅是数据采集工程师的必备技能,也深刻影响着前后端开发、安全测试和数据分析的工作流。从应用场景看,电商价格监控、舆情分析和市场研究都依赖于稳定高效的数据获取能力。本文聚焦于Python全栈反爬虫攻防,深入探讨JavaScript混淆、WebAssembly等前端保护技术的逆向思路,并系统介绍如何构建应对企业级风控的分布式爬虫架

weixin_33841722的博客 284

【亲测免费】 探索高效伪装——curl_cffi:模拟浏览器指纹的HTTP客户端

在网络世界中,有时候我们需要悄无声息地穿越障碍,而curl_cffi正是为此设计的一个强大工具。这个开源Python项目为你提供了全新的方式去应对那些挑剔的服务器,它们可能会因为检测到非标准的HTTP客户端而将你拒之门外。本文将带你深入了解curl_cffi,揭示其强大的技术特性,并展示如何将其应用于各种场景。 ## 项目介绍 curl_cffi是一个基于[curl-impersonate](...

gitblog_00689的博客 2890

微信域名检测API实战:原理、实现与多语言调用指南

在Web开发和网络爬虫领域,HTTP请求与响应分析是核心技术之一,其原理在于客户端与服务器通过协议进行数据交换。这项技术的核心价值在于能够自动化、高效地获取和验证网络资源的可访问性。在微信生态的营销与内容分发场景中,链接的可用性直接关系到业务流量入口的稳定性。通过模拟微信内置浏览器的User-Agent发起请求,并**分析重定向**后的最终URL和页面标题,可以精准判断域名是否被微信安全中心屏蔽。本文基于这一通用技术方案,详细拆解了检测机制,并提供了**PHP、JAVA、Python**三种主流语言的完整调

weixin_30338481的博客 393

python 使用curl_cffi绕过指纹识别解决ja3指纹

比requests/tls_client快分开,和aiohttp/pycurl的速度比肩。curl_cffi 可模拟真实浏览器的 TLS | JA3 指纹。遇到一个网站,忽然发现无论如何如何更换UA和代理请求都是。支持JA3/TLS和http2指纹模拟;

weixin_45091564的博客 5261

Python爬虫实战:从4399小游戏网站入门数据采集

网络爬虫是一种自动化程序,用于从互联网上抓取和提取数据。其核心原理是模拟浏览器行为,向目标服务器发送HTTP请求,获取HTML文档,再通过解析技术提取结构化信息。这项技术在数据驱动决策、市场分析和学术研究中具有重要价值,广泛应用于舆情监控、价格追踪和内容聚合等场景。以Python生态中的Requests库和BeautifulSoup工具为例,开发者可以高效地处理静态网页内容。本文聚焦于将4399小游戏网站作为实战案例,通过分析其清晰的页面结构,系统演示如何构建一个健壮的爬虫,涵盖从发送请求、解析HTML到数

weixin_30599769的博客 371

如何安装 Python在的第三方库:curl_cffi

另外,如果在安装过程中遇到问题,可能需要确保您的Python环境和pip工具是正确配置的,并且能够访问互联网来下载和安装库。如果您的意图是要安装类似于Curl命令行工具的库,那么您应该搜索其他相关库,例如。一旦安装成功,您就可以在您的Python代码中导入并使用。打开终端(Linux/macOS)或命令提示符(Windows)。如果您正在使用Python 3,则可能需要使用。,这些库提供了更高级的HTTP客户端功能。要安装Python的第三方库。运行以下命令来使用pip安装。请注意,这个库的名称是。

jixn的博客 8625

Python爬虫进阶:使用curl_cffi绕过TLS指纹检测

在网络爬虫开发中,TLS握手是客户端与服务器建立HTTPS连接的关键步骤。其原理是通过加密套件协商和密钥交换确保通信安全,但这一过程会生成唯一的客户端指纹(如JA3)。反爬虫系统利用这一技术特征,通过比对指纹库识别自动化工具,从而实施拦截。对于需要高效获取公开数据的开发者而言,绕过指纹检测能显著提升爬虫的稳定性和成功率。curl_cffi库通过模拟真实浏览器的TLS和HTTP/2指纹,为Python爬虫提供了深层伪装能力,使其在请求层面更接近人类用户行为,有效应对Cloudflare等企业级防护。

weixin_30323631的博客 354

爬虫:一文掌握 curl-cffi 的详细使用(支持 TLS/JA3 指纹仿真的 cURL 库)

curl_cffi是一个 Python 库,它通过 CFFI(C Foreign Function Interface)绑定提供了 libcurl 的功能,并增加了对抗 TLS 指纹检测的能力(如 JA3 指纹)。它提供了比标准pycurl更简单、更 Pythonic 的 API,同时保持了 libcurl 的强大功能。

数据知道的博客 1万+

Python爬虫突破TLS指纹检测:JA3/JA4原理与curl_cffi实战

TLS指纹检测是现代网络安全和反爬虫体系中的关键技术,它通过分析客户端在TLS握手过程中发送的密码套件、扩展列表等特征,生成唯一标识符来识别请求来源。其核心原理在于不同客户端(如浏览器与编程语言库)在构建Client Hello消息时存在稳定差异,服务器通过JA3或JA4算法将这些特征标准化为指纹字符串,并与已知指纹库比对。这项技术的工程价值在于为服务器提供了更底层的客户端识别能力,有效区分自动化脚本与真实浏览器流量,广泛应用于金融风控、数据防爬和API安全防护等场景。针对Python爬虫开发者常遇到的40

weixin_34401479的博客 332

python爬虫返回403错误?加了请求头+代理也解决不了 >>看这

【疑惑】:使用python的requests库发起get或post请求返回403代码错误,使用postman发起请求发现状态码竟然成功了。首先排除ip问题,ip有问题的话postman也访问不了。难道是headers出现了问题吗,通过对比发现也不是headers的问题。【解疑】:其实遇到这种情况大概率是遇到了“原生模拟浏览器 TLS/JA3 指纹的验证”,浏览器和postman都有自带指纹验证,而唯独requests库没有。这就让反爬有了区分人为和爬虫的突破口。2、使用 pyhttpx 库。

云霄IT的博客 1万+

《爬虫和逆向教程》 - 专栏介绍和目录

本专栏为爬虫初学者和进阶开发者量身定制的爬虫和逆向学习园地。为你提供全面而深入的爬虫和逆向技术指导,从入门到精通,从基础理论到高级实战,助你在数据的海洋中畅游,挖掘出有价值的信息。通过本专栏的学习,你将具备独立开发和优化爬虫程序的能力,及逆向分析能力和项目开发能力,成为爬虫领域的佼佼者。

数据知道的博客 2万+

Python自动化抢票系统实战:从浏览器自动化到性能优化

网络爬虫与自动化技术是提升工作效率的关键工具,其核心原理在于模拟人类操作与服务器进行数据交互。在Python生态中,通过结合浏览器自动化框架与HTTP请求库,可以实现对复杂Web应用的精准控制,这一技术组合在数据采集、流程自动化等领域具有重要价值。以票务场景为例,面对高并发、反爬机制等挑战,开发者需要深入理解请求拦截、Cookie管理、异步并发等关键技术。本文聚焦于构建高性能抢票系统,详细解析了如何利用Playwright进行浏览器自动化模拟登录,并通过requests库实现毫秒级订单提交,同时分享了IP代

weixin_30633405的博客 482

aiohttp-socks:用于aiohttp的代理(HTTP,SOCKS)连接器

aiohttp-袜子 aiohttp-socks软件包为提供了代理连接器。 支持SOCKS4(a),SOCKS5,HTTP(隧道)以及代理链。 它使用实现核心代理功能。 要求 Python> = 3.6 aiohttp> = 2.3.2 python-socks [asyncio]> = 1.0.1 安装 pip install aiohttp_socks 用法 aiohttp用法: import aiohttp from aiohttp_socks import ProxyType , ProxyConnector , ChainProxyConnector async def fe

Python爬虫实战:从静态到动态网页的文档自动化抓取方案

网络爬虫技术是数据采集与信息自动化的核心工具,其原理是通过程序模拟浏览器行为,自动访问网页并提取结构化数据。这项技术能够将分散的“数据孤岛”高效整合,形成可分析利用的“信息金矿”,在**市场分析**、学术研究、竞品调研等场景中具有极高的工程价值。针对网页文档抓取这一具体需求,技术实现通常涉及两个关键环节:对于静态页面,可使用Requests库发送HTTP请求,并结合BeautifulSoup解析HTML以定位文档链接;对于依赖JavaScript渲染的**动态页面**,则需要借助Selenium或Playw

dgqvhtlwq472235338的博客 338

Clarity 3D Layout

Clarity 3D Layout Clarity 3D layout是3D 全波电磁场模型提取工具,它可以导入已经设计好的PCB文件也可以直接在Clarity 3D layout创建版图进行3D 全波电磁场模型提取。

m0_53280471的博客 5479

SpotBugs使用

spotbugs命令行参数解析

javajingling的专栏 2947

Python小说爬虫实战:从架构设计到反爬应对的工程化指南

网络爬虫作为数据采集的核心技术,其原理是通过模拟浏览器行为自动抓取并解析网页数据。这项技术的价值在于能够高效、自动化地获取公开网络信息,广泛应用于搜索引擎、数据分析、价格监控和内容聚合等场景。在Python生态中,requests和BeautifulSoup4是构建基础爬虫的热门工具组合,它们简化了HTTP请求和HTML解析过程。然而,面对现代网站的反爬机制,一个健壮的爬虫项目需要从工程化角度进行架构设计,涵盖调度、去重、存储和异常处理等模块。本文以构建一个小说网站爬虫为例,深入探讨了如何利用异步并发提升效

weixin_33904756的博客 413

使用trae自动生成前后端分离的web应用程序

使用ai自动生成前后端分离的web应用程序

一介书生 2524

网络爬虫入门到实战:从数据采集原理到Python代码实现

网络爬虫是一种自动化数据采集技术,其核心原理是通过模拟浏览器行为,向目标服务器发送HTTP请求并解析响应内容,从而高效获取互联网上的公开信息。这项技术打破了信息孤岛,实现了数据的聚合与结构化,为搜索引擎、市场分析、学术研究等场景提供了关键的数据支撑。在工程实践中,Python凭借Requests、BeautifulSoup、Scrapy等成熟库和框架,成为构建爬虫的主流选择。开发者需掌握网页解析、并发处理、反爬应对等核心技能,并始终遵循robots.txt协议与访问频率控制等合规要求,确保数据采集的合法性与

weixin_33842304的博客 371

YOLOv5/v7/v8首发革新改进——轻巧、创新的LADH检测头

本文介绍了一种原创改进的轻量化非对称多级压缩LADH检测头,该检测头能够实现即插即用,并在YOLOv5/v7/v8检测器中取得了显著的性能提升。本文将介绍一种原创改进的轻量级非对称多级压缩LADH(Lightweight Asymmetric Dual-Head)检测头,该检测头能够实现即插即用,并显著提升YOLO检测器的性能。因此,我们提出了一种非对称多级压缩的方法,即对不同类别的检测头采用不同的压缩比例。然而,为了进一步提高YOLO的性能,我们进行了一项原创改进,设计了一种轻巧且创新的LADH检测头。

IpyVariable的博客 2726

《QGIS快速入门与应用基础》009:国内镜像源(清华大学/阿里云)下载技巧

针对国内用户下载QGIS速度慢、易中断的问题,推荐使用清华大学和阿里云两大国内镜像源,提供3-10MB/s的极速下载方案。详细解析镜像源核心优势、分步骤下载指南及校验方法,对比清华(同步快、北方优选)与阿里云(南方节点多)的特点。针对常见问题如版本延迟、404错误等提供解决方案,并介绍搭配IDM等工具实现多线程加速的进阶技巧。通过镜像源+下载工具组合,用户可高效获取QGIS安装包,为后续系统安装奠定基础。

LuckyHanMo的博客 1734

使用curl_cffi模拟浏览器指纹:绕过TLS与HTTP/2检测的Python实践

在网络爬虫和自动化测试中,客户端指纹识别是服务器区分真实浏览器与自动化脚本的关键技术。其原理在于服务器通过分析TLS握手特征、HTTP/2帧序列、请求头组合以及JavaScript环境等多维度信息,构建唯一的客户端标识。这项技术的核心价值在于提升Web服务的安全性,防止恶意爬取和自动化攻击。在数据采集、API测试和反欺诈等应用场景中,如何有效模拟或绕过指纹检测成为技术难点。本文聚焦于使用Python的curl_cffi库,通过模拟真实浏览器的JA3指纹和HTTP/2行为,实现在不启动无头浏览器的情况下,高效

chuoshao2508的博客 418

手把手教你学Simulink——逆变器场景:基于PR控制器的单相逆变器并网控制策略仿真

摘要:本文详细介绍基于PR控制器的单相逆变器并网控制策略的Simulink仿真实现。首先分析PR控制器在单相逆变应用中的优势,然后逐步讲解模型搭建过程,包括主电路设计(直流电源、全桥逆变器、L滤波器)、控制回路实现(参考电流生成、坐标变换、PR控制器设计)以及关键参数设置。通过仿真验证了PR控制器对电网频率的精确跟踪能力,并网电流THD<3%。最后提出优化建议,如加入状态观测器、自适应参数整定等改进方向。该建模方法为可再生能源系统中的逆变器控制提供了有效验证手段。

MHD0815的博客 497

浏览器自动化工具在爬虫应用中的核心弊病与优化实践

浏览器自动化工具如Selenium、Playwright和Puppeteer,其核心原理是通过模拟真实用户操作来控制浏览器,实现Web界面的自动化测试。在技术价值上,它们能处理JavaScript渲染的现代网页,但将其用于数据爬取时,却面临显著的性能与资源挑战。从应用场景看,这类工具在需要复杂交互或获取渲染后快照时具有优势,但在大规模数据采集任务中,其高内存占用、低效的页面加载速度以及易被反爬系统识别的特性,使其并非最优选择。本文聚焦于Selenium、Playwright等工具在爬虫任务中的实际弊病,并探

dht91597的博客 409

YOLOv11改进 | 添加注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

这篇文章给大家带来的改进机制是一个汇总篇,包含一些简单的注意力机制,本来一直不想发这些内容的(网上教程太多了,发出来增加文章数量也没什么意义),但是群内的读者很多都问我这些机制所以单独出一期视频来汇总一些比较简单的注意力机制添加的方法和使用教程,本文的内容不会过度的去解释原理,更多的是从从代码的使用上和实用的角度出发去写这篇教程。欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、GAM2.1 GAM的介绍2.2 GAM的核心代码。

Snu77的博客 5151

CANoe:入门介绍

CANoe网络通信分析:CANoe用户可以在台架上或者车辆中分析ECU和整个系统的多总线通信。Trace窗口:用于列出所有总线活动,例如消息或错误帧。对于每条消息,都可以显示单独的信号值Graphics窗口:用于在时间轴上以图形方式在线显示消息和诊断请求中传输的值,例如rpm或温度值Statistics窗口:用于显示有用的网络和节点统计信息,例如节点和帧级别的总线负载、突发计数器/持续时间、帧和错误的计数器/速率、控制器状态Data窗口:用于显示预选数据,例如数字或条形图数据。

jasonj333 9748
上一篇: 安卓手机上app常驻保活方案
下一篇: app安全之安卓native层安全分析(一):frida 与unidbg
geekbyte.
博客等级 码龄11年 308粉丝 75原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值