Python中HTTP请求返回200但页面访问计数未增加的问题如何解决?
背 景:帮助朋友刷第三方网页的项目浏览量
实现思路:用 python3 实现一个简单的脚本,从大象代理获取 proxy,然后通过 proxy 用 requests.get 访问
现 象:日志观察访问有成功有失败,50 个 proxy 随机取用 3 次,即 150 次访问有 70 个左右成功,但是页面的访问统计没有增加
请教问题:
- 是否可能对端服务器存在驻留时间判断等机制,需要停留一段时间才可以算作一次访问?
- 一般访问统计还有什么防刷策略,应该怎样规避?
Python中HTTP请求返回200但页面访问计数未增加的问题如何解决?
5 回复
还可能对方页面有缓存,不是实时结果
这个问题通常是因为网站使用了反爬虫机制,比如验证请求头、检查Cookie或JavaScript渲染。直接发HTTP请求可能被识别为机器人。
核心解决思路是让Python请求更像真实浏览器。这里给你一个完整的解决方案:
import requests
from bs4 import BeautifulSoup
import time
import random
def simulate_browser_request(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Cache-Control': 'max-age=0',
'Referer': 'https://www.google.com/'
}
# 添加随机延迟避免请求过快
time.sleep(random.uniform(1, 3))
# 使用session保持会话
session = requests.Session()
# 首次请求获取必要信息
response = session.get(url, headers=headers)
# 检查是否需要处理动态内容
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
# 检查是否有JavaScript重定向或动态加载
if soup.find('meta', {'http-equiv': 'refresh'}):
print("页面有meta刷新,可能需要处理重定向")
# 这里可以添加重定向处理逻辑
# 模拟点击或表单提交(如果需要)
# 查找并提交可能的表单
forms = soup.find_all('form')
if forms:
for form in forms:
# 处理表单数据
form_data = {}
inputs = form.find_all('input')
for input_tag in inputs:
if input_tag.get('name'):
form_data[input_tag.get('name')] = input_tag.get('value', '')
# 提交表单
form_action = form.get('action')
if form_action:
if not form_action.startswith('http'):
form_action = url + form_action
form_response = session.post(form_action, data=form_data, headers=headers)
print(f"表单提交状态: {form_response.status_code}")
return response
# 使用示例
url = "https://example.com/page-to-count"
response = simulate_browser_request(url)
if response.status_code == 200:
print("请求成功,页面应该被正常计数")
# 这里可以添加验证逻辑,比如检查页面特定元素
else:
print(f"请求失败,状态码: {response.status_code}")
关键点:
- 完整的请求头模拟真实浏览器
- 使用Session保持会话状态
- 添加随机延迟避免被识别为机器人
- 处理可能的表单提交
如果还有问题,可能需要考虑:
- 网站使用JavaScript动态加载内容(需要用Selenium)
- 需要处理验证码
- 有IP限制或频率限制
建议先用浏览器开发者工具查看真实请求的所有参数,然后在Python中完全复现。
如果是页面上计数器的数值没变的,可能你还要刷计数器脚本。只是 http get 源网页的,计数器脚本的代码只是读取回来了,没有执行。正常的计数器,会在网页渲染的时候执行计数器脚本,计数。所以,理论上说,你还要刷页面的计数器脚本
先确定对方的计数器是不是真的,可能只是和 Unix 时间戳线性相关
你要先问你朋友,他们页面的浏览量是怎么统计的啊…

