Python

[Python] CRAWLING - Element Access

SangRok Jung 2022. 9. 16. 23:25
반응형

 

Ready


▶ BeautifulSoup을 설치한다.

* 주피터 노트북 사용 예

!pip install bs4

 

 

▶ Selenium을 설치한다.

Selenium은 웹 브라우저를 컨트롤하여 UI를 Automation하는 도구다.

!pip install selenium

 

 

 

▶ 각종 라이브러리를 불러온다.

import bs4
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import sys

 

 

 

 

Element Access


HTML코드에 데이터 정보를 가져오기 위한 여러가지 방법이 있다.

 

▶ id

유니크한 값이다.

2.2.1 Ver. 이상

# id로 가져온다.
# driver.find_element_by_id("btnMenu").click()

 

 

 

 

 

 

 

▶ name

중복한 값이다.

 

2.2.1 Ver. 이상

 

 

 

 

 

 

 

 

▶XPATH

타겟팅에 대한 정확도가 높다.

 

2.2.1 Ver. 이상

driver.find_element_by_xpath("/html/body/header/div/div/div/div/span").click()
driver.find_element_by_xpath("//header/div/div/div/div/span").click()
driver.find_element_by_xpath("//span/button[@id='btnMenu']").click()

 

 

 

 

 

 

 

 

 

 

▶ LINK_TEXT

링크 태그만 가능하다.

2.2.1 Ver. 이상

# link text로 가져온다.
driver.find_element_by_link_text("특집관").click()

 

 

 

 

 

 

 

▶Tag name

정확도가 상당히 낮다.

2.2.1 Ver. 이상

# 제일 위에있는 버튼 태그를 인식해서 가져온다.
driver.find_element_by_tag_name("button").click()

 

 

 

 

 

 

 

 

 

▶ By Class name

2.2.1 Ver. 이상

# class name으로 가져온다.
driver.find_element_by_class_name("menu_btn").click()

 

 

 

 

 

 

 

▶ CSS Selector

정확도가 높다.

2.2.1 Ver. 이상

# css Selector로 가져온다.
driver.find_element_by_css_selector("span.menuBtn").click()

 

 

 

 

 

 

 

 

 

예제


▷ "대한민국 구석구석" 에서 카페 찾기.

# 검색어를 입력받습니다.
keyword = input("검색어를 입력하세요 : ")

path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)
# 사파리 사용시
# webdriver.Safari()


driver.get("https://korean.visitkorea.or.kr/main/main.do#home")
time.sleep(1)

driver.find_element_by_class_name("map_go").click()

time.sleep(7)

# 검색창에 입력값 입력.
driver.find_element_by_id("inp_search").click()
element = driver.find_element_by_id("inp_search")
element.send_keys(keyword)

# 엔터 버튼을 눌러 실행합니다.
enter = webdriver.Keys.ENTER
element.send_keys(enter)

# 조건들을 클릭합니다.
driver.find_element_by_xpath("//ul/li[@label='tour']").click()
driver.find_element_by_xpath("//ul/li[@label='food']").click()
driver.find_element_by_xpath("//ul/li[@label='parking']").click()
driver.find_element_by_xpath("//ul/li[@label='hotel']").click()

 

 

 

 

 

▷ 구글에 검색하기

# 검색어를 입력받습니다.
keyword = input("검색어를 입력하세요 : ")

path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)
# 사파리 사용시
# webdriver.Safari()

# 웹에 주소를 입력합니다.
driver.get("https://www.google.com")
time.sleep(1)


# 검색창을 클릭한뒤 입력받은 키워드를 입력합니다.
driver.find_element_by_xpath("//div/input[@class='gLFyf gsfi']").click()
element = driver.find_element_by_xpath("//div/input[@class='gLFyf gsfi']")
element.send_keys(keyword)


# 엔터 버튼을 눌러 실행합니다.
enter = webdriver.Keys.ENTER
element.send_keys(enter)

 

 

 

 

 

▷ 네이버에 로그인 하기

# 네이버 로그인
# 아이디, 비번 입력받기.
keyword_id = input("id를 입력하세요 : ")
keyword_pw = input("pw를 입력하세요 : ")


# 크롬 드라이버 실행
path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)

# 웹 주소 입력 및 네이버 실행
driver.get("https://www.naver.com")
time.sleep(1)

# 로그인 버튼 클릭
driver.find_element_by_xpath("//div/a[@class='link_login']").click()

# id 인풋에 id 입력
driver.find_element_by_xpath("//div/input[@id='id']").click()
ele_id = driver.find_element_by_xpath("//div/input[@id='id']")
ele_id.send_keys(keyword_id)

# pw 인풋에 pw 입력
driver.find_element_by_xpath("//div/input[@id='pw']").click()
ele_id = driver.find_element_by_xpath("//div/input[@id='pw']")
ele_id.send_keys(keyword_pw)

# 로그인 버튼 클릭
driver.find_element_by_id("log.login").click()

 

 

 

 

 

 

 

 

 

웹사이트에서 검색후 텍스트 가져오기


▷ naver

# 네이버 검색창에 가을여행 검색해 출력되는 결과중 블로그 섹션의 텍스트를 추출

# 검색결과를 저장할 파일경로와 파일이름 입력
f_name = input("검색결과를 저장할 파일 경로와 이름을 입력하세요(예:/Users/werther/test.txt) : ")

# 크롬 드라이버 실행
path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)

# 웹 주소 입력 및 네이버 실행
driver.get("https://www.naver.com/")
time.sleep(1)

search = driver.find_element_by_id("query")
search.send_keys("가을여행")
enter = webdriver.Keys.ENTER
search.send_keys(enter)

driver.find_element_by_link_text("VIEW").click()
driver.find_element_by_link_text("블로그").click()


# 현제 페이지의 html코드를 불러온다. 지금 부터 BeautifulSoup 숲의 영역
full_html = driver.page_source


soup = BeautifulSoup(full_html, "html.parser")
# soud.find('ul', class_ = "list_thumType type1")[0]
contents = soup.find('ul', class_= "lst_total")


# 파일 쓰기
with open(f_name, 'a') as f :
    for i in contents :
        print(i.text.strip(), file = f)

# 파일 읽기
with open(f_name, "r") as f : 
    line = f.readlines()
    print(line)

 

▷ daum

# 다음 검색창에 가을여행 검색해 출력되는 결과중 블로그 섹션의 텍스트를 추출

# 검색결과를 저장할 파일경로와 파일이름 입력
f_name = input("검색결과를 저장할 파일 경로와 이름을 입력하세요(예:/Users/werther/test.txt) : ")

# 크롬 드라이버 실행
path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)

# 웹 주소 입력 및 네이버 실행
driver.get("https://www.daum.net/")
time.sleep(1)

search = driver.find_element_by_id("q")
search.send_keys("가을여행")
enter = webdriver.Keys.ENTER
search.send_keys(enter)

# 현제 페이지의 html코드를 불러온다. 지금 부터 BeautifulSoup 숲의 영역
full_html = driver.page_source


soup = BeautifulSoup(full_html, "html.parser")
# soud.find('ul', class_ = "list_thumType type1")[0]
contents = soup.find('div', class_= "adLinkColl log_wide")


# 파일 쓰기
with open(f_name, 'a') as f :
    for i in contents :
        print(i.text.strip(), file = f)

# 파일 읽기
with open(f_name, "r") as f : 
    line = f.readlines()
    print(line)

 

▷ google

# 구글 검색창에 가을여행 검색해 출력되는 결과중 블로그 섹션의 텍스트를 추출

# 검색결과를 저장할 파일경로와 파일이름 입력
f_name = input("검색결과를 저장할 파일 경로와 이름을 입력하세요(예:/Users/werther/test.txt) : ")

# 크롬 드라이버 실행
path = "./Downloads/chromedriver_mac64/chromedriver"
driver = webdriver.Chrome(path)

# 웹 주소 입력 및 네이버 실행
driver.get("https://www.google.com/webhp?hl=ko&sa=X&ved=0ahUKEwiMk5mRkZH6AhXUEXAKHTEzAWUQPAgI")
time.sleep(1)

search = driver.find_element_by_xpath("//div/input[@class='gLFyf gsfi']")
search.send_keys("가을여행")
enter = webdriver.Keys.ENTER
search.send_keys(enter)

time.sleep(2)

# 현제 페이지의 html코드를 불러온다. 지금 부터 BeautifulSoup 숲의 영역
full_html = driver.page_source


soup = BeautifulSoup(full_html, "html.parser")
# soud.find('ul', class_ = "list_thumType type1")[0]
contents = soup.find('div', class_= "v7W49e")


# 파일 쓰기
with open(f_name, 'a') as f :
    for i in contents :
        print(i.text.strip(), file = f)

# 파일 읽기
with open(f_name, "r") as f : 
    line = f.readlines()
    print(line)

 

반응형

'Python' 카테고리의 다른 글

[Python] numpy  (0) 2022.09.22
[Python] Anaconda 가상환경 생성  (0) 2022.09.21
[Python] CRAWLING - BeautifulSoup  (0) 2022.09.13
[python] WEB CRAWLING  (1) 2022.09.08
[python] Module  (0) 2022.09.06