stemadb反扒机制分析

steamdb爬取时,需要验证cookie,分析可知cookie有效时间为一天

接下来开始正文,分析cookie如何获取。

一. 网站访问需求

经尝试得知,网站主要验证cookie中的 __cfduid 与 cf_clearance

只有俩同时有,网站才能正常访问。

二. 分析网站逻辑

2.1 接下来分析,__cfduid 与 cf_clearance 是如何得到的

可以看出,在访问网站时,进行了俩次访问。第一次访问时,返回了503,在第二次访问时,返回了200。

第一次访问时,不带cookie, 进行get, 返回了503 ,以及 cookie中的__cfduid值。

第二次访问时,为post, 分析可以看出,cf_clearance值就是在这次请求中返回的。只要解决掉这次post就可以得到cf_clearance。

2.2 分析第二次post的网址以及参数是如何得到的。

这次post,需要知道的有:

1.请求字符串,就是网址后面的一串,经尝试,每次请求都是不同的。

2. 表单数据 r、jschl_vc、pass、jschl_answer

既然每次请求均不同,且我们只访问了俩次网址,那么,这些参数必然是第一次get时返回的信息中获取的。

2.3 分析第一次get返回的信息

尝试分析,第一次get返回的数据,在form表单中,我们可以很明显的获取 请求字符串,r、jschl_vc、pass 的值,但是jschl_answer 并没有值,继续分析返回的数据,

在网站的js中,我们可以发现这么一行,a = document.getElementById('jschl-answer'); 从页面中获取jschl-answer元素。

在后续的js中,还可以发现 a.value = (+JAdEwio.gi).toFixed(10); '; 121;

得出,jschl-answer 的值是经过js计算得出的。

这样,我们就得到了第二阶段 post的地址,以及参数

2.4 进行第二次请求,获取cf_clearance

进行第二次请求,网站返回 cf_clearance 值,至此,通过携带cf_clearance与__cfduid,我们便可以任意的访问steamdb网站,获取我们需要的信息。

### 需要注意 如果是第一次访问,__cfduid在第一次和第二次直接会进行一次改变,记得更新。###

### 防止51job Cookies被反爬虫机制检测及应对措施 为了有效防止51job网站的Cookies被反爬虫机制检测并封禁,可以采取多种策略来模拟真实用户的访问行为,从而降低触发反爬虫机制的风险。 #### 使用浏览器自动化工具 通过Selenium等浏览器自动化工具控制真实的浏览器进行页面加载和数据抓取。这种方式能够完全模仿人类操作习惯,包括JavaScript执行环境、Cookie管理以及HTTP头部信息设置等方面都更加贴近实际用户的行为模式[^4]。 ```python from selenium import webdriver import time options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) url = "https://www.51job.com/" driver.get(url) time.sleep(3) # Wait for page to load completely # Perform actions on the webpage here... html_content = driver.page_source with open('51job.html', 'w', encoding='utf-8') as file: file.write(html_content) driver.quit() ``` #### 设置合理的请求间隔时间 频繁地发送大量请求容易引起服务器注意,适当增加每次请求之间的时间间隔有助于减少这种风险。可以通过`random.uniform()`函数随机生成一定范围内的等待秒数,在连续两次请求间暂停程序运行一段时间[^2]。 ```python import random import time for i in range(number_of_requests): response = requests.get(target_url, headers=headers) sleep_time = random.uniform(min_sleep_seconds, max_sleep_seconds) time.sleep(sleep_time) ``` #### 更改User-Agent和其他HTTP头字段 不同的设备和操作系统具有各自独特的特征码,修改HTTP请求中的User-Agent字符串以及其他相关属性可以帮助伪装成来自不同类型的客户端发出的流量,提高匿名度。 ```python headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 \ (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7' } response = requests.get(url=url, headers=headers) ``` #### 处理动态变化的Cookies 对于那些依赖于会话状态的应用场景来说,保持有效的登录凭证至关重要。如果目标站点采用了基于Token的身份验证方式,则需特别关注token的有效期及其刷新逻辑;而对于普通的session cookie而言,则可通过定期更新cookie jar的方式来维持合法身份[^1]。 ```python import http.cookiejar cj = http.cookiejar.LWPCookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) login_data = {...} # 登录表单的数据字典 resp_login = opener.open(login_url, data=urllib.parse.urlencode(login_data).encode()) # 访问其他受保护资源前先获取最新的cookies target_resp = opener.open(target_url) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值