티스토리 뷰

webdriver자동 설치

import chromedriver_autoinstaller
chromedriver_autoinstaller.install()

위 방법을 이용하면 웹드라이버를 매번 다운로드 하지 않아도 된다. mac, windows, linux다 됩니다.
pip install chromedriver_autoinstaller 은 해주어야 합니다.

 

 

webdriver로 chrome열기

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
driver = webdriver.Chrome(options=chrome_options)

 

인스타 접속하기

import chromedriver_autoinstaller
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

chromedriver_autoinstaller.install()
chrome_options = Options()
driver = webdriver.Chrome(options=chrome_options)

url = 'https://www.instagram.com/'
driver.get(url)

time.sleep(2)
driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label/input').send_keys('oceanfog1@gmail.com')
driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label/input').send_keys('')

위 코드를 실행하면 인스타그램 접속하고 id, pw까지 입력 합니다.

 

pip install selenium

pip install chromedriver_autoinstaller

위 두가지 라이브러리를 설치 해주어야 돌아갑니다.

 

기다리기

셀레늄을 쓰는 이유는 http request를 보내면 데이터가 오기전에 크롤이 끝나버리는 경우가 있기 때문입니다.
그래서 원하는 데이터는 오지 않고 껍데기만 오는 경우가 많습니다.
원하는 데이터가 로딩될때까지 기다렸다가 크롤링 하기 위해서 셀레늄을 씁니다.

다음 코드는 인스타그램에 '발레'라는 해쉬태그를 검색한 페이지를 크롤하는 코드입니다.

import os
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# rootPath = os.path.split(os.environ['VIRTUAL_ENV'])[0]
rootPath = ".."
chrome_options = Options()
# chrome_options.add_argument("--headless")
driver = webdriver.Chrome(
    executable_path="{}/chrome/chromedriver".format(rootPath),
    options=chrome_options
)

url = "https://instagram.com/explore/tags/발레"
driver.get(url)

wait = WebDriverWait(driver, 2)
wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".EZdmt"))
)
pageString = driver.page_source
print(pageString)
driver.close()
wait = WebDriverWait(driver, 2)
wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".EZdmt"))

위 로직이 특정 css 셀렉터가 나올때까지 기다리는 코드입니다.
이 코드를 쓰려면 여러가지 라이브러리가 필요합니다.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

WebDriverWait, EC, By 이렇게 세가지가 있어야 합니다.

스크롤 내리기

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함