해외 사이트를 크롤링하려고 시도 했을때 해외에서 접근을 막은 (한국의 접근을)막은 사이트의 경우 프록시를 우회하여
접근할 필요가 있다 그 경우에 사용했던 코드이다..
무료 프록시 제공사이트에서 포트와 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)
'웹크롤링' 카테고리의 다른 글
[ 웹크롤링 ] 셀레니움 스크롤하기, 유튜브 댓글크롤링 (0) | 2021.08.26 |
---|---|
[ 웹크롤링 ] 셀레니움 설치, 동적 크롤링 - bs4, requests로 안되는 페이지 크롤링하기 (0) | 2021.08.25 |
[ 웹크롤링 ] 카카오api를 사용하여 지오코딩하기 위경도가져오기 (0) | 2021.08.24 |
[ 웹크롤링 ] header 크롤링 서버거부 user-agent (0) | 2021.08.23 |
[ 웹크롤링 ] 공공 API이용하기 공휴일 정보 가져오기 (3) | 2021.08.23 |