IPIPGO proxy ip Python爬虫如何接入代理ip?requests/scrapy双框架教程

Python爬虫如何接入代理ip?requests/scrapy双框架教程

Python爬虫为什么需要代理IP? 当你用Python写爬虫频繁访问同一个网站时,很容易被对方服务器识别并封禁IP。比如连续快速请求几十次,服务器可能会认为这是机器人行为,直接把你当前的IP地址拉黑。这时候你…

Python爬虫如何接入代理ip?requests/scrapy双框架教程

Python爬虫为什么需要代理IP?

当你用Python写爬虫频繁访问同一个网站时,很容易被对方服务器识别并封禁IP。比如连续快速请求几十次,服务器可能会认为这是机器人行为,直接把你当前的IP地址拉黑。这时候你的爬虫就再也无法获取数据了。

代理IP的作用就是帮你Cacher l'adresse IP réelle。通过代理服务器中转请求,目标网站看到的是代理IP而不是你的真实IP。即使某个代理IP被封锁,你只需要更换另一个就能继续工作。对于需要大量采集数据的项目来说,这是必不可少的工具。

选择适合爬虫的代理IP类型

市面上的代理IP主要分为几种,但并不是所有类型都适合爬虫使用:

Type d'agent spécificités Scénario
Agents de centre de données 成本低、速度快,但容易被识别 对匿名性要求不高的简单任务
Agent résidentiel 来自真实家庭网络,匿名性高 需要高匿名的爬虫项目
Agents résidentiels statiques IP固定不变,稳定性好 需要长期维持会话的任务

对于大多数爬虫项目,我推荐使用住宅代理,特别是像ipipgo提供的这种。他们的动态住宅代理IP池很大,而且IP来自真实家庭网络,不容易被网站识别为代理,更适合长期稳定的数据采集工作。

requests框架接入代理IP教程

requests是Python中最常用的HTTP库,接入代理IP非常简单。下面通过几个实际例子来演示。

基础代理设置:

import requests

 代理IP配置(以ipipgo为例)
proxies = {
    'http': 'http://username:password@proxy.ipipgo.com:port',
    'https': 'https://username:password@proxy.ipipgo.com:port'
}

response = requests.get('http://httpbin.org/ip', proxies=proxies)
print(response.text)

自动轮换代理IP:

import requests
import random

 多个代理IP列表
proxy_list = [
    'http://user:pass@proxy1.ipipgo.com:port',
    'http://user:pass@proxy2.ipipgo.com:port',
    'http://user:pass@proxy3.ipipgo.com:port'
]

def get_with_random_proxy(url):
    proxy = {'http': random.choice(proxy_list), 'https': random.choice(proxy_list)}
    try:
        response = requests.get(url, proxies=proxy, timeout=10)
        return response
    except requests.exceptions.RequestException as e:
        print(f"代理请求失败: {e}")
        return None

 使用示例
result = get_with_random_proxy('https://httpbin.org/ip')

带重试机制的代理请求:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

def create_session_with_retry(proxy):
    session = requests.Session()
    
     设置重试策略
    retry_strategy = Retry(
        total=3,
        backoff_factor=1,
        status_forcelist=[429, 500, 502, 503, 504],
    )
    
    adapter = HTTPAdapter(max_retries=retry_strategy)
    session.mount("http://", adapter)
    session.mount("https://", adapter)
    
    session.proxies = proxy
    return session

 使用示例
proxy = {'https': 'http://user:pass@proxy.ipipgo.com:port'}
session = create_session_with_retry(proxy)
response = session.get('https://example.com')

Scrapy框架接入代理IP教程

Scrapy是专业的爬虫框架,接入代理IP需要通过中间件来实现。

方法一:使用内置的HttpProxyMiddleware

 在settings.py中配置
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

 在爬虫中设置代理
class MySpider(scrapy.Spider):
    name = 'example'
    
    def start_requests(self):
        urls = ['http://example.com/page1', 'http://example.com/page2']
        for url in urls:
            yield scrapy.Request(url, meta={
                'proxy': 'http://username:password@proxy.ipipgo.com:port'
            })

方法二:自定义代理中间件(推荐)

 middlewares.py
import random

class RandomProxyMiddleware(object):
    def __init__(self, proxy_list):
        self.proxy_list = proxy_list
    
    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            proxy_list=crawler.settings.get('PROXY_LIST')
        )
    
    def process_request(self, request, spider):
        if not request.meta.get('proxy'):
            proxy = random.choice(self.proxy_list)
            request.meta['proxy'] = proxy

 settings.py配置
PROXY_LIST = [
    'http://user:pass@proxy1.ipipgo.com:port',
    'http://user:pass@proxy2.ipipgo.com:port',
]

DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.RandomProxyMiddleware': 100,
}

方法三:使用scrapy-rotating-proxies库

 首先安装:pip install scrapy-rotating-proxies

 settings.py配置
ROTATING_PROXY_LIST = [
    'http://user:pass@proxy1.ipipgo.com:port',
    'http://user:pass@proxy2.ipipgo.com:port',
]

DOWNLOADER_MIDDLEWARES = {
    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

代理IP使用中的常见问题与解决方案

问题1:代理连接超时

解决方案:增加超时时间,添加重试机制。在requests中设置timeout参数,在Scrapy中配置下载超时时间。

问题2:代理IP失效或被封

解决方案:使用IP池轮换策略,及时检测代理IP的可用性。可以定期测试代理IP是否还能正常访问目标网站。

问题3:速度慢

解决方案:选择地理位置近的代理服务器,比如目标网站在美国,就选择美国的代理IP。ipipgo提供全球220多个国家的代理IP,可以根据需要选择最优节点。

问题4:认证失败

解决方案:检查用户名密码是否正确,确认代理地址和端口是否有效。建议将认证信息单独保存在配置文件中。

Pourquoi nous recommandons le service proxy ipipgo

在众多代理服务商中,ipipgo有几个明显优势:

资源丰富:动态住宅代理IP资源总量高达9000万+,覆盖全球220+国家和地区,这意味着你几乎可以获取到任何地理位置的IP地址。

Anonymat élevé :所有IP均来自真实家庭网络,具备高度匿名性,目标网站很难识别这是代理IP。

稳定性好:静态住宅代理IP资源总量高达50w+,99.9%的可用性保证,适合需要长期稳定运行的项目。

Facturation flexible :按流量计费,支持轮换和粘性会话,可以根据业务需求灵活选择使用方式。

对于需要高质量代理IP的爬虫项目,特别是商业用途的数据采集,选择专业的服务商可以节省大量维护成本。

Foire aux questions QA

Q: 一个代理IP可以用多久?

A: 这取决于目标网站的封禁策略。建议每个代理IP使用时间不要过长,定期轮换可以降低被封风险。ipipgo支持自定义IP时效,可以根据需要设置。

Q: 如何检测代理IP是否有效?

A: 最简单的方法是请求http://httpbin.org/ip这样的服务,查看返回的IP地址是否与代理IP一致。也可以直接请求目标网站,检查返回状态码。

Q: 爬虫使用代理IP会被完全匿名吗?

A: 使用高质量的住宅代理可以极大提高匿名性,但要注意其他可能泄露身份的细节,如User-Agent、Cookie等。需要全面伪装爬虫特征。

Q: 遇到网站有反爬虫机制怎么办?

A: 除了使用代理IP,还需要配合随机延时、更换User-Agent、处理Cookie等策略。综合使用多种技术才能有效规避反爬虫检测。

我们的产品仅支持在境外网络环境下使用(除TikTok专线外),用户使用IPIPGO从事的任何行为均不代表IPIPGO的意志和观点,IPIPGO不承担任何法律责任。

scénario d'entreprise

Découvrez d'autres solutions de services professionnels

💡 Cliquez sur le bouton pour plus de détails sur les services professionnels

美国长效动态住宅ip资源上新!

Fournisseur professionnel de services d'IP proxy étrangers-IPIPGO

Nous contacter

Nous contacter

13260757327

Demande de renseignements en ligne. QQ chat

Courriel : hai.liu@xiaoxitech.com

Horaires de travail : du lundi au vendredi, de 9h30 à 18h30, jours fériés.
Suivre WeChat
Suivez-nous sur WeChat

Suivez-nous sur WeChat

Haut de page
fr_FRFrançais