Python中HTTP请求返回200但页面访问计数未增加的问题如何解决?

背 景:帮助朋友刷第三方网页的项目浏览量

实现思路:用 python3 实现一个简单的脚本,从大象代理获取 proxy,然后通过 proxy 用 requests.get 访问

现 象:日志观察访问有成功有失败,50 个 proxy 随机取用 3 次,即 150 次访问有 70 个左右成功,但是页面的访问统计没有增加

请教问题:

  1. 是否可能对端服务器存在驻留时间判断等机制,需要停留一段时间才可以算作一次访问?
  2. 一般访问统计还有什么防刷策略,应该怎样规避?

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}")

关键点:

  1. 完整的请求头模拟真实浏览器
  2. 使用Session保持会话状态
  3. 添加随机延迟避免被识别为机器人
  4. 处理可能的表单提交

如果还有问题,可能需要考虑:

  • 网站使用JavaScript动态加载内容(需要用Selenium)
  • 需要处理验证码
  • 有IP限制或频率限制

建议先用浏览器开发者工具查看真实请求的所有参数,然后在Python中完全复现。

如果是页面上计数器的数值没变的,可能你还要刷计数器脚本。只是 http get 源网页的,计数器脚本的代码只是读取回来了,没有执行。正常的计数器,会在网页渲染的时候执行计数器脚本,计数。所以,理论上说,你还要刷页面的计数器脚本

先确定对方的计数器是不是真的,可能只是和 Unix 时间戳线性相关

你要先问你朋友,他们页面的浏览量是怎么统计的啊…

回到顶部