python代理ip关于设置proxies的问题

简介: python代理ip关于设置proxies的问题

前言


在进行Python开发时,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题,这时,使用代理IP就可以避免这些问题,保证程序正常运行。本文将介绍如何使用Python设置代理IP,以及如何使用代理IP访问指定的网站。主要介绍通过urllib库实现网页访问时,如何通过设置代理IP来实现IP轮换等功能。


一、什么是代理IP?


代理IP是指通过代理服务器获取的IP地址,因为代理服务器具有隐藏用户真实IP、改变客户端访问地址、提高访问速度、突破访问限制等功能,所以使用代理IP可以实现一些数据获取的目的。


二、为什么需要设置代理IP?


在开发过程中,经常会遇到被封IP或者频繁访问同一网站被限制访问等问题。这时,使用代理IP就可以避免这些问题,保证程序正常运行。


三、如何设置代理IP?


在Python中,使用urllib库实现网页访问时,可以通过设置代理IP来实现IP轮换等功能。下面,我们以爬取某个网站为例,讲解如何设置代理IP。


首先,我们需要从免费的代理IP网站上获取代理IP,这里以站大爷代理为例,代码如下:

import requests
from bs4 import BeautifulSoup
 
def get_proxy():
    url = 'https://www.zdaye.com/free/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    table = soup.find('table', attrs={'id': 'ip_list'})
    proxies = []
    for row in table.tbody.find_all('tr'):
        if row.find_all('td')[4].string == 'HTTP':
            proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
            proxies.append(proxy)
    return proxies

上面的代码中,我们使用requests库访问站大爷代理网站,获取网页内容。然后,使用BeautifulSoup库解析网页内容,获取代理IP信息。

获取到代理IP后,我们需要测试这些代理IP是否可用,筛选出可用的代理IP。代码如下:

import requests
 
def test_proxy(proxy):
    url = 'https://www.baidu.com'
    proxies = {'http': 'http://' + proxy, 'https': 'https://' + proxy}
    try:
        r = requests.get(url, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return True
        else:
            return False
    except:
        return False
 
def get_valid_proxies(proxies):
    valid_proxies = []
    for proxy in proxies:
        if test_proxy(proxy):
            valid_proxies.append(proxy)
    return valid_proxies

在上面的代码中,我们使用requests库通过代理IP访问百度网站,如果返回状态码为200,则说明代理IP可用。如果访问出现异常或者状态码不为200,则说明代理IP不可用。

获取到可用的代理IP后,我们就可以使用这些代理IP来访问指定的网站。代码如下:

import random
import requests
 
def get_html(url, proxies):
    proxy = random.choice(proxies)
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    try:
        r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return r.text
        else:
            return None
    except:
        return None

上面的代码中,我们使用random库随机选择一个代理IP,然后使用requests库访问指定的网站。在访问时,需要将代理IP添加到proxies参数中,这样就可以使用代理IP来访问指定的网站了。


四、完整代码


import random
import requests
from bs4 import BeautifulSoup
 
def get_proxy():
    url = 'https://www.zdaye.com/free/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    table = soup.find('table', attrs={'id': 'ip_list'})
    proxies = []
    for row in table.tbody.find_all('tr'):
        if row.find_all('td')[4].string == 'HTTP':
            proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
            proxies.append(proxy)
    return proxies
 
def test_proxy(proxy):
    url = 'https://www.baidu.com'
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    try:
        r = requests.get(url, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return True
        else:
            return False
    except:
        return False
 
def get_valid_proxies(proxies):
    valid_proxies = []
    for proxy in proxies:
        if test_proxy(proxy):
            valid_proxies.append(proxy)
    return valid_proxies
 
def get_html(url, proxies):
    proxy = random.choice(proxies)
    proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'}
    try:
        r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        if r.status_code == 200:
            return r.text
        else:
            return None
    except:
        return None
 
if __name__ == '__main__':
    url = 'https://www.baidu.com'
    proxies = get_proxy()
    valid_proxies = get_valid_proxies(proxies)
    html = get_html(url, valid_proxies)
    print(html)

在上面的代码中,我们首先定义了一个函数get_proxy(),用于获取代理IP。然后,定义了一个函数test_proxy(),用于测试代理IP是否可用。接下来,定义了一个函数get_valid_proxies(),用于获取可用的代理IP。最后,定义了一个函数get_html(),用于使用代理IP访问指定的网站,并返回HTML内容。


在主函数中,我们先访问西刺代理网站,获取代理IP信息。然后,使用get_valid_proxies()函数获取可用的代理IP。最后,使用get_html()函数访问百度网站,并输出返回内容。


总结

以上就是关于Python代理IP设置proxies的介绍,包括代理IP的概念、代理IP的设置和使用方法。在实际开发中,使用代理IP可以避免IP封禁等问题,提高效率和稳定性。


相关文章
|
3月前
|
机器学习/深度学习 算法 机器人
使用 Python TorchRL 进行多代理强化学习
本文详细介绍了如何使用TorchRL库解决多代理强化学习(MARL)问题,重点讨论了在多代理环境中应用近端策略优化(PPO)。通过使用VMAS模拟器,该文展示了如何在GPU上并行训练多机器人系统,使其在避免碰撞的同时到达目标。文章涵盖了依赖项安装、PPO原理、策略与评论家网络设计、数据收集及训练循环,并强调了TorchRL在简化开发流程、提升计算效率方面的优势。无论是集中式还是分布式评论家配置,TorchRL均能有效支持复杂的MARL研究与实践。
58 5
使用 Python TorchRL 进行多代理强化学习
|
1月前
|
iOS开发 MacOS Python
Python编程小案例—利用flask查询本机IP归属并输出网页图片
Python编程小案例—利用flask查询本机IP归属并输出网页图片
|
1月前
|
安全 Python
Python脚本实现IP按段分类
【10月更文挑战第04天】
26 7
|
2月前
|
API Python
使用Python requests库下载文件并设置超时重试机制
使用Python的 `requests`库下载文件时,设置超时参数和实现超时重试机制是确保下载稳定性的有效方法。通过这种方式,可以在面对网络波动或服务器响应延迟的情况下,提高下载任务的成功率。
149 1
|
1月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
|
1月前
|
监控 开发者 Python
Python在AOIP(Audio Over IP)方面的应用探讨
Python在AOIP(Audio Over IP)方面的应用探讨
|
1月前
|
IDE 搜索推荐 网络安全
Python编程:编写被动信息搜集之网址的IP及Whois查询
Python编程:编写被动信息搜集之网址的IP及Whois查询
|
3月前
|
移动开发 Java 编译器
什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件
什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件
50 1
|
4月前
|
数据采集 API 网络安全
Python Requests代理使用入门指南
《Python Requests 代理使用入门指南》将带你深入了解如何使用Python Requests库来配置HTTP代理,并灵活处理各种权限和服务器响应问题。从代理服务器的基础知识,到代理认证与授权设置,本指南为初学者提供了全面的教学内容。
Python Requests代理使用入门指南
|
3月前
|
Python
【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】
【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】