Python爬虫使用requests代理为何依然被封堵?

我通过爬取西刺代理获取代理 list ,如下面代码

def setProxiesConfig():
  url = 'http://www.xicidaili.com/nn/'
  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
  }
  web_data = requests.get(url, headers=headers)
  soup = BeautifulSoup(web_data.text, 'lxml')
  ips = soup.find_all('tr')
  ip_list = []
  for i in range(1, len(ips)):
    ip_info = ips[i]
    tds = ip_info.find_all('td')
    ip_list.append(tds[1].text + ':' + tds[2].text)
  print(ip_list)
  return ip_list
#获取随机 IP
def get_random_ip(ip_list):
  proxy_list = []
  for ip in ip_list:
    proxy_list.append('http://' + ip)
  proxy_ip = random.choice(proxy_list)
  proxies = {'http': proxy_ip}
  return proxies

获取列表后,随机取一个 IP{'http':'http://ip:9999'} 然后放到 get 中

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
  }
  ipC=get_random_ip(ip_list)
  web_data = requests.get(URL, headers=headers,proxie= ,verify=False,timeout=10)
  soup = BeautifulSoup(web_data.text, 'lxml')

爬取了 46 个页面的时候还可以操作,但是之后就开始提示 timeout 了,就无论如何也不能爬取了,这是为啥?


Python爬虫使用requests代理为何依然被封堵?

11 回复

开一个页面休息 5 秒试试


我遇到过同样的问题。requests库本身只是发送HTTP请求的工具,被封堵通常是因为代理质量或请求特征被识别了。

首先检查代理是否有效:

import requests

proxies = {
    'http': 'http://your-proxy:port',
    'https': 'https://your-proxy:port'
}

# 测试代理连通性
try:
    response = requests.get('http://httpbin.org/ip', proxies=proxies, timeout=10)
    print(f"代理IP: {response.json()['origin']}")
except Exception as e:
    print(f"代理不可用: {e}")

如果代理本身没问题,被封的原因可能是:

  1. 请求头不完整 - 很多网站会检查User-Agent等头部
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive'
}
  1. 请求频率太高 - 即使用了代理,太快的请求也会触发风控
import time
import random

# 添加随机延迟
time.sleep(random.uniform(1, 3))
  1. 代理IP质量差 - 免费的代理IP很多都被网站标记了,需要换高质量代理

  2. Cookie和会话管理 - 有些网站需要维持会话状态

session = requests.Session()
session.proxies.update(proxies)
session.headers.update(headers)

建议先用免费代理测试,稳定后再考虑付费代理服务。

随机 sleep,sleep 时间大于 10 秒

time.sleep(randomint(3, 5))

你确定你这个代码能跑通?最下面 proxie=的位置后面都没东西了

而且那个参数名叫 proxies,不是 proxie。如果你的代码没问题的话,代理本身超时也是有可能的,注意看报错信息。

这种免费代理就是垃圾,基本上不可以用的,最好是买代理。。

用收费代理吧

建议上 芝麻代理之类的, 靠谱点

用之前线上 ip138 之类的检测下是否更换成功啊,免费的 ip 真的都挺垃圾

代理池要不断测试更新

回到顶部