python维护代理ip的实现

时间:2024-04-12 08:15:40

前言:

        Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。

        代理IP的作用是可以为爬虫提供多个IP地址,从而加快其爬取数据的速度,同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。

一、代理ip
1.1 代理ip简介
        代理ip 是介于浏览器和Web服务器之间的一台服务器,如果使用代理IP,Request信号就会先送到代理服务器,并由代理服务器得到浏览器所需要的信息并传送到你的浏览器。

1.2 代理ip分类
        关于代理ip,其实种类也是有很多,按照不同的类别可以延伸出多种分类。

1.3 代理ip的优点

        代理ip的优点有很多,它不仅可以提高我们的访问速度,还可以保护我们的信息。

        代理ip采用的是多重加密协议,同时支持白名单和账户密码验证,能避免信息泄露,有效的保障信息安全。

1.4 代理ip的必要性

        使用代理ip的优点有很多,但是还有一个重要的地方就是使用代理ip的必要性,尤其是对于某些爬虫程序来说是非常重要的一环。

        因为有些网站可能加入了防御机制,其中最主要的一种方式是当发现单个ip大量的访问请求的时候就会将对应ip加入黑名单不响应。
这样的话我们的爬虫就失去作用,所以必须要避免这种情况出现。

        这个时候的代理ip发挥的作用可谓是举足轻重,所以这也是使用代理ip的重要原因之一。

随机请求头也很关键

# 导入模块:requests、fake-useragent、UserAgent
import requests
from fake_useragent import UserAgent

# 要访问的url地址
url='https://www.amazon.cn/s?bbn=106200071&rh=n%3A106200071%2Cp_89%3AHuawei+%E5%8D%8E%E4%B8%BA'


# 随机请求头
headers={'User-Agent':UserAgent().random}

# 代理ip 的API(IPIDEA网站获取的)
api_url='代理ip 的API(IPIDEA网站获取的)'

res = requests.post(api_url,headers=headers, verify=True)

# proxies = {'协议': '协议://IP:端口号'}
proxie = "https://%s"%(res.text)
proxies = {'http': proxie}

# 打印所有的代理ip
print(proxies)

# 获取亚马逊某热销商品数据 python模块测试并输出结果
html=requests.get(url=url,headers=headers,proxies=proxies).text
print(html)

从代理ip网站获取免费代理ip实现

import requests
from bs4 import BeautifulSoup

# 1. 获取代理IP列表
def get_proxy_list():
    # 构造请求头,模拟浏览器请求
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }

    # 请求代理IP网页
    url = "http://www.zdaye.com/"
    response = requests.get(url, headers=headers)

    # 解析网页获取代理IP列表
    soup = BeautifulSoup(response.text, "html.parser")
    proxy_list = []
    table = soup.find("table", {"id": "ip_list"})
    for tr in table.find_all("tr"):
        td_list = tr.find_all("td")
        if len(td_list) > 0:
            ip = td_list[1].text.strip()
            port = td_list[2].text.strip()
            type = td_list[5].text.strip()
            proxy_list.append({
                "ip": ip,
                "port": port,
                "type": type
            })
    return proxy_list

# 2. 验证代理IP可用性
def verify_proxy(proxy):
    # 构造请求头,模拟浏览器请求
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }

    # 请求目标网页并判断响应码
    url = "http://www.baidu.com"
    try:
        response = requests.get(url, headers=headers, proxies=proxy, timeout=5)
        if response.status_code == 200:
            return True
        else:
            return False
    except:
        return False

# 3. 测试代理IP列表可用性
def test_proxy_list(proxy_list):
    valid_proxy_list = []
    for proxy in proxy_list:
        if verify_proxy(proxy):
            valid_proxy_list.append(proxy)
    return valid_proxy_list

# 4. 使用代理IP发送请求
def send_request(url, headers, proxy):
    # 发送请求并返回响应结果
    response = requests.get(url, headers=headers, proxies=proxy)
    return response.text

# 程序入口
if __name__ == "__main__":
    # 获取代理IP列表
    proxy_list = get_proxy_list()

    # 验证代理IP可用性
    valid_proxy_list = test_proxy_list(proxy_list)

    # 输出可用代理IP
    print("有效代理IP列表:")
    for proxy in valid_proxy_list:
        print(proxy)

    # 使用代理IP发送请求
    url = "http://www.baidu.com"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }
    proxy = {
        "http": "http://" + valid_proxy_list[0]["ip"] + ":" + valid_proxy_list[0]["port"],
        "https": "https://" + valid_proxy_list[0]["ip"] + ":" + valid_proxy_list[0]["port"]
    }
    response = send_request(url, headers, proxy)
    print(response)