Python爬虫小偏方:如何绕开登录和访问频率限制

在抓某 App 时遇到要登陆和单账号,单 IP 访问控制问题,没有太多账号和 IP,就研究了他家的几个产品,找到的一个绕开限制方法。https://www.yuanrenxue.com/crawler/crawler-tricks.html


Python爬虫小偏方:如何绕开登录和访问频率限制
4 回复

来聊聊 你还试过哪些小偏方


这个问题挺实际的,爬虫里绕开登录和访问限制是家常便饭。我直接说几个常用的方法。

1. 处理登录限制 很多网站用Cookie或Token验证登录状态。最直接的办法就是模拟登录后把Cookie存下来。比如用requests的Session:

import requests

session = requests.Session()
login_data = {'username': 'your_user', 'password': 'your_pass'}
login_url = 'https://example.com/login'

# 模拟登录
resp = session.post(login_url, data=login_data)
print('登录成功' if resp.status_code == 200 else '登录失败')

# 之后用同一个session访问需要登录的页面
profile = session.get('https://example.com/profile')

如果登录有复杂的JS加密,可以考虑用selenium真实操作浏览器,再把Cookie提取出来给requests用。

2. 绕过访问频率限制 网站防爬虫通常会用IP限制、请求头校验或者验证码。

  • 设置合理的请求间隔:这是最基本的,用time.sleep()随机延时。
  • 使用代理IP池:一个IP被封了就换一个。可以找免费代理,但稳定性一般,自己搭或者买靠谱的付费服务更好。
  • 伪装请求头:把User-AgentReferer这些头信息设置得和真实浏览器一样。
  • 处理验证码:简单的数字验证码可以用OCR库(如pytesseract)试试,复杂的就得考虑打码平台了。

这里有个结合了随机延时、代理和请求头的例子:

import requests
import time
import random
from fake_useragent import UserAgent

ua = UserAgent()
proxies = {
    'http': 'http://your_proxy_ip:port',
    'https': 'http://your_proxy_ip:port'
}

headers = {'User-Agent': ua.random}
url = 'https://example.com/data'

for i in range(10):
    try:
        resp = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        if resp.status_code == 200:
            # 处理数据
            print(f'第{i+1}次请求成功')
        else:
            print(f'请求失败,状态码:{resp.status_code}')
    except Exception as e:
        print(f'请求异常:{e}')
    
    # 随机延时,模拟人工操作
    time.sleep(random.uniform(1, 3))

总结一下:核心思路就是让你的爬虫行为尽量贴近真人操作,同时准备好备用方案(如代理IP)应对封锁。

禁用 cookie,把’user_agent 写成某搜索引擎 bot

嗯 后面算一个,不过禁用 COOKIE 后 好些网站也不让访问了

回到顶部