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


    目录

    前言

    一、什么是代理IP?

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

    三、如何设置代理IP?

    四、完整代码

    总结


    前言

    在进行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,这里以站大爷代理为例,代码如下:

    1. import requests
    2. from bs4 import BeautifulSoup
    3. def get_proxy():
    4.     url = 'https://www.zdaye.com/free/'
    5.     headers = {
    6.         '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'}
    7.     r = requests.get(url, headers=headers)
    8.     soup = BeautifulSoup(r.text, 'html.parser')
    9.     table = soup.find('table', attrs={'id': 'ip_list'})
    10.     proxies = []
    11.     for row in table.tbody.find_all('tr'):
    12.         if row.find_all('td')[4].string == 'HTTP':
    13.             proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
    14.             proxies.append(proxy)
    15.     return proxies

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

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

    1. import requests
    2. def test_proxy(proxy):
    3.     url = 'https://www.baidu.com'
    4.     proxies = {'http': 'http://' + proxy, 'https': 'https://' + proxy}
    5.     try:
    6.         r = requests.get(url, proxies=proxies, timeout=10)
    7.         if r.status_code == 200:
    8.             return True
    9.         else:
    10.             return False
    11.     except:
    12.         return False
    13. def get_valid_proxies(proxies):
    14.     valid_proxies = []
    15.     for proxy in proxies:
    16.         if test_proxy(proxy):
    17.             valid_proxies.append(proxy)
    18.     return valid_proxies

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

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

    1. import random
    2. import requests
    3. def get_html(url, proxies):
    4.     proxy = random.choice(proxies)
    5.     proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    6.     headers = {
    7.         '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'}
    8.     try:
    9.         r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
    10.         if r.status_code == 200:
    11.             return r.text
    12.         else:
    13.             return None
    14.     except:
    15.         return None

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

    四、完整代码

    1. import random
    2. import requests
    3. from bs4 import BeautifulSoup
    4. def get_proxy():
    5.     url = 'https://www.zdaye.com/free/'
    6.     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'}
    7.     r = requests.get(url, headers=headers)
    8.     soup = BeautifulSoup(r.text, 'html.parser')
    9.     table = soup.find('table', attrs={'id': 'ip_list'})
    10.     proxies = []
    11.     for row in table.tbody.find_all('tr'):
    12.         if row.find_all('td')[4].string == 'HTTP':
    13.             proxy = ':'.join([row.find_all('td')[1].string, row.find_all('td')[2].string])
    14.             proxies.append(proxy)
    15.     return proxies
    16. def test_proxy(proxy):
    17.     url = 'https://www.baidu.com'
    18.     proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    19.     try:
    20.         r = requests.get(url, proxies=proxies, timeout=10)
    21.         if r.status_code == 200:
    22.             return True
    23.         else:
    24.             return False
    25.     except:
    26.         return False
    27. def get_valid_proxies(proxies):
    28.     valid_proxies = []
    29.     for proxy in proxies:
    30.         if test_proxy(proxy):
    31.             valid_proxies.append(proxy)
    32.     return valid_proxies
    33. def get_html(url, proxies):
    34.     proxy = random.choice(proxies)
    35.     proxies = {'http': 'http://' + proxy, 'https': 'http://' + proxy}
    36.     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'}
    37.     try:
    38.         r = requests.get(url, headers=headers, proxies=proxies, timeout=10)
    39.         if r.status_code == 200:
    40.             return r.text
    41.         else:
    42.             return None
    43.     except:
    44.         return None
    45. if __name__ == '__main__':
    46.     url = 'https://www.baidu.com'
    47.     proxies = get_proxy()
    48.     valid_proxies = get_valid_proxies(proxies)
    49.     html = get_html(url, valid_proxies)
    50.     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封禁和反反爬虫等问题,提高爬虫的效率和稳定性。

  • 相关阅读:
    mysql+redis+tomcat+nginx
    2024年csdn最新最全面的fiddler教程【1】
    C++基础——auto关键字和范围for遍历
    高性能mysql-查询性能优化
    性能监控计算——封装带性能计算并上报的npm包(第三章)
    MySQL 数据库
    win10环境下PCL安装和配置回顾(一)
    内核调用用户态代码
    Java基础八股
    【云原生之kubernetes实战】在k8s环境下部署Leantime项目管理系统
  • 原文地址:https://blog.csdn.net/wq10_12/article/details/134375433