데이터 분석 실무 with 파이썬 05장 정리

 

-라이브러리

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

from bs4 import BeautifulSoup

import numpy as np
import pandas as pd
import time

 

-크롬 드라이버 열기

# 크롬 드라이버 열기
serve = Service('chromedriver.exe')
driver = webdriver.Chrome(service=serve)

>> chrome 버전이 맞아야함

>> 버전 확인 (크롬 > 설정 > chrome 정보 )

>> 102.0.5005.61로 다운받아야함

 

>> selenium을 통해 크롬드라이버를 실행할 때 경로를 지정해야 하므로 파일이 있는 폴더에 압축 풀기

 

 

- 인스타그램 접속하기

# 인스타그램 접속하기

url = 'https://www.instagram.com/'

driver.get(url)
time.sleep(2)

>> driver.get(url) 명령을 통해 특정 url에 접속

    # get -> 에러나도 에러가 뜨지 않음 아무 반응 안함

>> time 꼭 넣어줘야 함 

     사이트에 접속하거나 클릭한 뒤 해당 페이지의 정보를 다 받을 때 까지 대기 시간이 필요함

 

 

- url 접속하기

# 인스타그램 검색 결과 url 만들어서 접속하기

def insta_searching(word):
    url = 'http://www.instagram.com/explore/tags/' + word
    
    return url

>> insta_searching() 함수는 word라는 매개변수를 입력받는 함수

     키워드 word에 따라 인스타그램 검색 결과 url이 달라짐

 

- F12 키 누르면 페이지 정보가 뜸

 

 

 

- 아이디, 비번 넣기

email = '인스타계정입력해주세요'   ### 계정 정보 수정 필요
input_id = driver.find_elements_by_css_selector('input._2hvTZ.pexuQ.zyHYP')[0]
input_id.clear()
input_id.send_keys(email)

password = '인스타비번입력해주세요' ### 비번 정보 수정 필요
input_pw = driver.find_elements_by_css_selector('input._2hvTZ.pexuQ.zyHYP')[1]
input_pw.clear()
input_pw.send_keys(password)
input_pw.submit()
time.sleep(3)

>> 인스타 계정 정보인 이메일과 패스워드 입력

      input_pw.submit() 이 실행되면 입력했던 계정 정보를 바탕으로 로그인 진행

** 개인 정보 노출 주의

 

ID : class="_2hvTZ pexuQ zyHYP"

PW : class="_2hvTZ pexuQ zyHYP"

 

 

 

- 검색 결과 페이지 접속하기

word = '제주도맛집'
url = insta_searching(word)
driver.get(url)
time.sleep(3)

>> selenium으로 크롬드라이버 실행.

     insta_searching() 함수를 이용해 '제주도맛집'에 대한 인스타그램 검색 결과 확인하는 URL 생성

     driver.get(url) 명령어를 이용해 해당 URL에 접속

     이때도 time 꼭 넣어주기

 

- select an element 기능 활성화 >> 웹페이지의 HTML 내에서 첫 번째 게시글 해당 부분 클릭

<div class="_aagw"></div> 로 작성돼 있음

 

 

- HTML에서 첫 번째 게시글 찾아 클릭하기 (곧 제거됨)

# 첫번째 게시글 열기

# 게시글 정보 가져오기

def select_first(driver):
    first = driver.find_element_by_css_selector('div._aagw')
    first.click()  # 클릭
    time.sleep(3)
    
select_first(driver)

# 곧 제거되는 버전

 

- HTML에서 첫 번째 게시글 찾아 클릭하기 (뉴 버전)

 

# 첫번째 게시글 열기

# 게시글 정보 가져오기
from selenium.webdriver.common.by import By

def select_first(driver):
#     first = driver.find_element_by_css_selector('div._aagw')
    first = driver.find_element(By.CSS_SELECTOR, 'div._aagw')
    first.click()
    time.sleep(3)
    
select_first(driver)

# 뉴 버전

>> select_first() 함수에서는 find_element(By.CSS_SELECTOR)를 이용

     태그명이 div이고 class명이 _aagw인 요소를 찾아 클릭

 

>> 게시글 클릭한 뒤 정보를 로딩하는 시간이 소요되기 때문에 time.sleep(3) 꼭 사용

 

 

>> 오른쪽 마우스 > copy > copy select , copy xpath

- copy element : <div class="_aagw"></div>
- copy select
#mount_0_0_za > div > div:nth-child(1) > div > div.rq0escxv.l9j0dhe7.du4w35lb > div > div > div.j83agx80.cbu4d94t.d6urw2fd.dp1hu0rb.l9j0dhe7.du4w35lb > div._a3gq > section > main > article > div._aaq8 > div > div > div:nth-child(1) > div:nth-child(1) > a > div._aagu > div._aagw
-copy xpath:
//*[@id="mount_0_0_za"]/div/div[1]/div/div[1]/div/div/div[1]/div[1]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div[1]/div[2]

 

 

 

- 게시글 정보 가져오기

1) 현재 페이지의 HTML 정보 가져오기

# 현재 페이지 hrml 정보 가져오기

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser') # html 파싱
soup

>> driver.page_source 명령어를 통해 현재 화면에 표시된 내용의 HTML 데이터 가져오기

     이 정보들을 BeautifulSoup을 통해 필요한 정보들 추출

 

>> 오른쪽 마우스 > 페이지 소스 보기 한 것과 같은 결과

 

2) 본문 내용 가져오기

# 본문 내용 가져오기
soup.select('div._aat6 > ul')
soup.select('div._aat6 > ul')[0].text

>> 게시글의 본문 가져오기

     크롬 개발자 도구에서 위치 찾기 기능을 활용해 본문에 해당하는 HTML을 살펴보면 span 태그를 찾을 수 있음

     <div class="_aat6"> 부분을 찾을 수 있다.

 

 

>>  div._aat6 > ul  : div 태그 중 class명이 _aat6인 태그, 그 바로 아래에 있는 ul 태그

      ('div._aat6 > ul')[0].text : ul 태그 중 첫 번째 요소 중 텍스트 부분만 선택

    

복사했습니다!