import os
import re
import pandas as pd
import pickle
import collections
import numpy as np
import math
from ast import literal_eval
from time import gmtime, strftime
import re
import time
from tqdm import tqdm
from bs4 import BeautifulSoup
# Scrapping
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
# Error Handling
import socket
import urllib3
import urllib.request
from urllib.request import urlopen
from urllib.parse import quote_plus
from urllib.request import urlretrieve
from selenium.common.exceptions import NoSuchElementException, ElementNotInteractableException, ElementClickInterceptedException
import warnings
warnings.filterwarnings('ignore')
์ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ!
๊ธฐ๋ณธ์ ์ผ๋ก pandas, BeautifulSoup, urllib.request, selenium.webdriver ์ ๋ ํ์ํ๋ค.
links = pd.read_csv(r"G:\๋ด ๋๋ผ์ด๋ธ\all_brand_links.csv")
links['brand_title'] = ''
๋งฅ์์๋ ๊ฒฝ๋ก ๋ณต์ฌํ๋๋ฐ์๋ ํ์ฐธ ์ ๋จน์๋ค,,,
(๋งฅ ๊ฒฝ๋ก๋ณต์ฌ ๋จ์ถํค! : opt + command + c )
์จ๋ ๋ณด๋ด์ฃผ์ ๋งํฌ๋ฅผ ์ด์๊ณ , ๋ด๊ฐ ํฌ๋กค๋ง ํ brand title์ ๋ฃ์ column์ ์๋ก ๋ง๋ค๊ณ ๋น๋ฆฌ์คํธ๋ฅผ ๋ฃ์๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ ๋ณดํต์ ์ด๋ฐ ์์ผ๋ก ํ์ง๋ ์๋๋ค๊ณ ํ์
จ๋ค. ์ด์จ๋ ''๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋์ค์ ์ฌ์ํ๋๋ผ๋ ์ด์๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์,
๊ทธ๋ฅ ํฌ๋กค๋งํ ๊ฐ์ list์ appendํ๋ฉด์ ํ๋์ list๋ฅผ ๋ง๋ ๋ค์์ dataFrame์ column์ผ๋ก ๋ถ์ด๋๊ฒ์ด ๋ง๋ค๊ณ ํ์ ๋ค...!
wd = webdriver.Chrome(ChromeDriverManager().install())
idx = 0
error = []
for i in links["brand_links"]:
try:
url = i
wd.get(url)
time.sleep(3)
wd.find_element_by_xpath("/html/body/div/div/div/div/div[1]/span/div/div[2]/div[2]/button[2]").click()
time.sleep(3)
html = wd.page_source
soup = soup = BeautifulSoup(html, "html.parser")
brand_title = soup.select_one('.details__brand__title').get_text()
links["brand_title"][idx] = brand_title
idx += 1
print(idx, "๊ฐ ์๋ฃ")
except Exception as e:
print(i, "์์ ์ค๋ฅ ๋ฐ์: ", e)
idx += 1
error.append(i)
pass
์ผ๋จ xpath๋ก ํ์
์ด ๋จ๋ ๊ฑธ ๊ณ์ ๋ซ์์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ , BeautifulSoup์ผ๋ก ๋ธ๋๋ ๋ช
์ ํ๋์ฉ๋ง ๊ฐ์ ธ์ค๋ฉด ๋์ด์๊ธฐ ๋๋ฌธ์ select_one() ํจ์๋ฅผ ์ด์ฉํ์๊ณ , text๋ง ๊ฐ์ ธ์ค๋ฉด ๋๊ธฐ ๋๋ฌธ์ get_text() ์ฌ์ฉํ์๋ค.
idx ๋ณ์๋ก ์ธ๋ฑ์ค๋ฅผ ํ๋ํ๋ ๋๋ ค์ฃผ๋ฉด์ ์์๋๋ก ๋ธ๋๋๋ฅผ ๋ถ์ฌ์คฌ๋๋ฐ, ์ฌ์ค ์ด๊ฑด ๊ทธ๋ฅ ์ฐจ๋ก๋๋ก ํ๋ํ๋ ๋ถ์ฌ์ฃผ๋ ๊ฑฐ๊ธฐ ๋๋ฌธ์ ๋ถ์๋ถ์ํ๊ฒ ์์ง์์๋ค.
์์๋๋ก ๋ฐ์์ค๋ฉด์ error๊ฐ ๋๋ฉด ๊ทธ ์๋ฌ๋ ๋์ค์ ๋ค์ ํ์ธํ ์ ์๊ฒ error ๋ฆฌ์คํธ์ ์ดํ๋ํด์ค ๋ค, passํ๋ค.์์งํ ์ฑ
์์ ํ๋๊ฑฐ ์ ์ธํ๊ณ ์ด๋ ๊ฒ ํฌ๋กค๋ฌ๋ง๋ค์ด์ ํฌ๋กค๋งํ๋๊ฑฐ ์ฒ์์ด์๋๋ฐ ๋๋ฆ,,, ์ํ๋ค๊ณ ์นญ์ฐฌ๋ ๋ฐ์์ ๋ฟ๋ฏ,,, (๋ถ๋๋ฝ์ง๋ง ๊ทธ๋๋ ๋ฟ๋ฏํ๋ค๊ณ ,,)
๋ด ์ปดํจํฐ์์๋ ๋๋ฌด ๋๋ ค์ ๋ค์ ํด๋ณผ ๋๋ 20๊ฐ๋ง ํ
์คํธ๋ก ๋๋ ธ๋ค.
๋๋ฆฌ๋ฉด ์ ๋ ๊ฒ ipynb์์ ๋์จ ๊ฒ์ฒ๋ผ ๋์จ๋ค.
๋๊ธ