Python 크롤러 - 초보자를 위한 프록시 IP 사용에 대한 자세한 튜토리얼

Python 프록시 IP 크롤러는 크롤러가 더 많은 네트워크 액세스 권한을 갖도록 하는 기술입니다. 프록시 IP의 기능은 크롤러에 여러 IP 주소를 제공하여 데이터 크롤링 속도를 높이는 동시에 과도한 액세스 빈도로 인해 웹 사이트가 차단되는 문제를 피할 수 있습니다. 이 기사에서는 Python을 사용하여 프록시 IP를 크롤링하고 사용하는 방법을 소개합니다.

1. 프록시 IP 획득

먼저 사용 가능한 프록시 IP 소스를 찾아야 합니다. 여기서는 Mr.Zhan의 프록시 IP를 예로 들어보겠습니다. Mr.Zhan의 프록시 IP는 유료 프록시와 일반 무료 프록시 IP를 제공하므로 사용이 매우 편리합니다.

웹사이트 에이전트 IP의 API 인터페이스 주소: `https://www.zdaye.com/free/inha/1/`

위의 API 인터페이스를 요청하면 IP 주소 및 포트 번호를 포함한 프록시 IP 정보 페이지를 얻을 수 있습니다. 요청 라이브러리의 get 메소드를 통해 API에서 반환된 정보를 얻을 수 있으며, 샘플 코드는 다음과 같습니다.

import requests

url = 'https://www.zdaye.com/free/inha/1/'
response = requests.get(url)
print(response.text)

위 코드를 실행하면 획득한 Proxy IP 정보를 확인할 수 있습니다. 하지만 반환 값을 구문 분석하고 유용한 IP 주소와 포트만 추출해야 합니다.

import requests
from bs4 import BeautifulSoup

url = 'https://www.zdaye.com/free/inha/1/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

proxies = []
for tr in soup.find_all('tr')[1:]:
    tds = tr.find_all('td')
    proxy = tds[0].text + ':' + tds[1].text
    proxies.append(proxy)

print(proxies)

위 코드에서는 BeautifulSoup 라이브러리를 사용하여 반환된 HTML 텍스트를 구문 분석하고 모든 `<tr>` 태그를 얻은 다음 각 `<tr>` 태그를 반복하여 IP 주소와 포트 정보를 추출하고 이를 다음 위치에 저장합니다. 목록.

2. 프록시 IP 확인

프록시 IP를 얻은 후에는 이러한 프록시 IP를 사용할 수 있는지 테스트해야 합니다. 여기서는 요청 라이브러리의 get 메소드를 통해 테스트했는데, 200이 반환되면 프록시 IP를 사용할 수 있다는 의미입니다. 프록시 IP를 사용하는 방법은 Proxys 매개변수를 request.get 메소드에 전달하는 것입니다. 샘플 코드는 다음과 같습니다.

import requests

url = 'http://www.baidu.com'

proxies = {
    'http': 'http://222.74.237.246:808',
    'https': 'https://222.74.237.246:808',
}
try:
    response = requests.get(url, proxies=proxies, timeout=10)
    if response.status_code == 200:
        print('代理IP可用:', proxies)
except:
    print('代理IP不可用:', proxies)

위 코드에서는 `http://www.baidu.com`에 요청을 보내고 액세스를 위해 프록시 IP를 사용합니다. 반환된 HTTP 상태 코드가 200이면 프록시 IP를 사용할 수 있음을 의미하고, 그렇지 않으면 사용할 수 없음을 의미합니다.

각 프록시 IP를 확인해야 하는 경우 위 코드를 반복해야 합니다. 예를 들면 다음과 같습니다.

import requests
from bs4 import BeautifulSoup

url = 'https://www.zdaye.com/free/inha/1/'

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

proxies = []
for tr in soup.find_all('tr')[1:]:
    tds = tr.find_all('td')
    proxy = tds[0].text + ':' + tds[1].text
    proxies.append(proxy)

for proxy in proxies:
    proxies_dict = {
        'http': 'http://' + proxy,
        'https': 'https://' + proxy,
    }
    try:
        response = requests.get(url, proxies=proxies_dict, timeout=10)
        if response.status_code == 200:
            print('代理IP可用:', proxies_dict)
    except:
        print('代理IP不可用:', proxies_dict)

위의 루프 코드에서는 먼저 모든 프록시 IP를 순회한 다음 각 프록시 IP를 확인합니다. 프록시 IP를 사용할 수 있으면 이를 인쇄하고, 그렇지 않으면 사용할 수 없는 정보를 인쇄합니다.

3. 프록시 IP 테스트

사용 가능한 프록시 IP를 얻은 후에는 크롤링하기 전에 실제로 사용할 수 있는지 확인하기 위해 추가 테스트를 수행해야 합니다. 테스트를 위해 Baidu 및 360 Search와 같은 일반적인 검색 엔진을 사용할 수 있습니다. 여기서는 프록시 IP가 실제로 사용 가능한지 테스트하기 위해 Baidu를 예로 들어 보겠습니다.

import requests

url = 'http://www.baidu.com'

proxies = {
    'http': 'http://222.74.237.246:808',
    'https': 'https://222.74.237.246:808',
}
try:
    response = requests.get(url, proxies=proxies, timeout=10)
    if response.status_code == 200:
        if '百度一下' in response.text:
            print('代理IP可用:', proxies)
        else:
            print('代理IP不可用:', proxies)
    else:
        print('代理IP不可用:', proxies)
except:
    print('代理IP不可用:', proxies)

위 코드에서는 Baidu에 요청을 보내고 반환된 HTML 페이지에 'Baidu' 키워드가 포함되어 있는지 확인하여 프록시 IP가 실제로 사용 가능한지 확인합니다.

4. 프록시 IP 사용

사용 가능한 프록시 IP를 얻은 후에는 이를 사용하여 크롤링할 수 있습니다. 크롤링을 위해 프록시 IP를 사용하는 경우 이를 request.get 메소드에 프록시 매개변수로 전달해야 합니다. 샘플 코드는 다음과 같습니다.

import requests

url = 'http://www.baidu.com'

proxies = {
    'http': 'http://222.74.201.49:9999',
    'https': 'https://222.74.201.49:9999',
}
response = requests.get(url, proxies=proxies)
print(response.text)

위 코드에서는 프록시 IP를 사용하여 Baidu 웹사이트에 액세스하고 이를 ProxyS 매개변수로 request.get 메소드에 전달합니다. 프록시 IP를 사용할 수 있는 경우 프록시 IP를 사용하여 요청에 액세스합니다.

5. 완전한 코드

다음은 프록시 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)

위 코드에서는 먼저 Xisha 프록시 웹사이트를 크롤링하여 프록시 IP 목록을 얻습니다. 그런 다음 각 프록시 IP를 확인하여 사용 가능한지 확인하고 사용 가능한 프록시 IP를 목록에 저장합니다. 마지막으로 사용 가능한 프록시 IP를 선택하고 해당 프록시 IP를 사용하여 요청을 보냅니다.

6. 요약

이 기사에서는 프록시 IP의 기본 개념, 무료 프록시 IP를 얻는 방법, Python 및 샘플 코드에서 프록시 IP를 사용하는 방법, 프록시 IP 사용 시 주의 사항을 소개합니다. 크롤러 사용자에게 도움이 되기를 바랍니다.

추천

출처blog.csdn.net/wq10_12/article/details/132667632