# 불필요한 정지 코드 제거
time.sleep()
-->
# WebDriverWait을 사용함으로서 대기 시간이 동적으로 조절
WebDriverWait(driver, 30).until(
EC.presence_of_element_located((By.CSS_SELECTOR, ".product_title"))
)
# webdriver options
options.add_argument('--disable-images')
options.add_experimental_option("prefs", {'profile.managed_default_content_settings.images': 2})
options.add_argument('--blink-settings=imagesEnabled=false')
# Set page Laod Strategy to "none"
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.CHROME
caps["pageLoadStrategy"] = "none"
## remote chromedriver settings
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--ignore-ssl-errors=yes')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--log-level=3')
options.add_argument('--disable-gpu')
options.add_argument('--incognito')
# Add Image Loading inactive Flag to reduce loading time
options.add_argument('--disable-images')
options.add_experimental_option(
"prefs", {'profile.managed_default_content_settings.images': 2})
options.add_argument('--blink-settings=imagesEnabled=false')
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.200'
options.add_argument(f'user-agent={user_agent}')
driver = webdriver.Chrome(options=options)
def scrape_currency(url):
driver_currency = scrapping_setting(url, (800, 600))
try:
# wait until all elements appear
wait = WebDriverWait(driver_currency, 10)
wait.until(EC.presence_of_element_located((By.XPATH, '//*')))
content = driver_currency.page_source
soup = BeautifulSoup(content, 'lxml')
target_element = soup.select_one('div.YMlKec.fxKbKc')
if target_element:
return target_element.get_text()
else:
return 'Element not found'
finally:
# Close the WebDriver instance individually
if driver_currency:
driver_currency.quit()
try:
urls = [
"https://www.google.com/finance/quote/CNY-USD",
"https://www.google.com/finance/quote/CNY-VND",
"https://www.google.com/finance/quote/CNY-IDR",
"https://www.google.com/finance/quote/CNY-KRW",
"https://www.google.com/finance/quote/CNY-EUR"
]
data = [datetime.now(), 1]
with ThreadPoolExecutor() as executor:
results = list(executor.map(scrape_currency, urls))
data.extend(results)
# Example
driver_cookies = driver.get_cookies()
cookies = {cookie['name']: cookie['value'] for cookie in driver_cookies}
responses = []
for _ in range(final_page):
url = base_url + str(num)
response = requests.get(url, cookies=cookies)
responses.append(response)
num = num + 1
# Parsing with BeautifulSoup
data_list = []
for res in responses:
soup = BeautifulSoup(res.text, 'html.parser')
# Scraping specific values
elements = soup.find_all(class_='Resource')
id = [res.get('id') for res in elements]
스크래핑할 때 기존 데이터와 새로 생긴 데이터를 효과적으로 관리하는 방법에 대해 작성했습니다.
어떤 방법을 선택할지는 프로젝트 요구 사항과 자원, 데이터 양 등에 따라 다를 것입니다. 변경 사항을 실시간으로 모니터링해야 하는 경우에는 4번 방법이 유용할 수 있습니다. 그러나 일정한 주기로 데이터를 업데이트하는 것이 충분한 경우, 1번 방법을 사용할 수 있습니다.