해외 사이트를 크롤링하려고 시도 했을때 해외에서 접근을 막은 (한국의 접근을)막은 사이트의 경우 프록시를 우회하여

접근할 필요가 있다 그 경우에 사용했던 코드이다..

 

 

무료 프록시 제공사이트에서 포트와 ip를 받아오고 (크롤링) 그것을 적용하는 request코드이다.

from bs4 import BeautifulSoup
import pandas as pd
import requests
import re

headers = {'User-Agent':'--ari/537.36'}

import random

def random_us_proxy():
    
    proxy_url = "https://www.us-proxy.org/"

    res = requests.get(proxy_url)
    soup = BeautifulSoup(res.text,'lxml')

    table = soup.find('tbody')
    rows = table.find_all('tr')
    proxy_server_list = []

    for row in rows:
        https = row.find('td', attrs = {'class':'hx'})
        if https.text == 'yes':
            ip = row.find_all('td')[0].text
            port = row.find_all('td')[1].text
            server = f"{ip}:{port}"
            proxy_server_list.append(server)

    proxy_server = random.choices(proxy_server_list)[0]
    return proxy_server

proxy_server = random_us_proxy()
proxies = {"http": 'http://' + proxy_server, 'https': 'http://' + proxy_server}

res = requests.get(url, headers = headers, proxies=proxies)
res.raise_for_status() # 오류가 생기면 셀종료
soup = BeautifulSoup(res.text, 'lxml')

 

 

셀레니움 코드이다.

from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium import webdriver


proxy_ip_port = random_us_proxy()

proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = proxy_ip_port
proxy.ssl_proxy = proxy_ip_port

capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)

# replace 'your_absolute_path' with your chrome binary absolute path
driver = webdriver.Chrome(desired_capabilities=capabilities)

+ Recent posts