13일차 Web Crawling-3

정지원·2024년 3월 8일
0

에이블 스쿨 복습

목록 보기
17/51
post-thumbnail
  • 정적 웹페이지 데이터를 수집하려면 BeautifulSoup을 이용하여 HTML 문자열 데이터를 Parsing 해야 한다.

1. 네이버 연관 검색어 수집

import requests
from bs4 import BeautifulSoup

(1) 웹페이지 분석 URL

  • 요청방식과 URL을 확인하고 가져온다.
query = '삼성전자
url = 'https://search.naver.com/search.naver?query={query}'

(2) request > response (URL > html)

response = requests.get(url)

(3) str(html) > bs object

# BeautifulSoup 객체 만들어줌
dom = BeautifulSoup(response.text, 'html.parser')    

(4) bs object > .selcet(css-selector)

elements = dom.select('.lst_related_srch > .item')

element = elements[0]
element.text.strip() # 공백제거

(5) text > DataFrame

keywords = [element.text.strip() for element in elements]
keywords

>
['삼성전자주가',
 '삼성전자주식',
 '삼성전자 배당금',
 '오늘 삼성전자 주가',
 '삼성전자서비스',
 '삼성전자서비스센타',
 '삼성전자주가지수',
 '삼성전자주식가격',
 '삼성 전자레인지',
 '삼성전자 패밀리몰']

2. Gmarket 베스트상품 수집

# 필요 라이브러리
import pandas as pd
import requests
from bs4 import BeautifulSoup

(1) URL 찾기

  • requests 방식과 URL 확인
url = 'https://www.gmarket.co.kr/n/ qpbest'

(2) request > response (html방식)

response = requests.get(url)

(3) bs > DataFrame

# response를 BeautifulSoup으로 변환하고 dom에 저장
dom = BeautifulSoup(response.text, 'html.parser')

# CSS-selector 사용 select 200 items
elements = dom.select('#gBestWrap > div.best-list > ul > li')

# 15번째 상품 선택하여 원하는 정보 탐색
element = elements[14]

# items에 원하는 정보 넣기
items = []
for element in elements:
    data = {
        'title' : element.select_one('.itemname').text,
        'link' : element.select_one('.itemname').get('href'),
        'img' : 'https:' + element.select_one('img.image__lazy').get('src'),
        's-price' : element.select_one('.s-price').text.split(' ')[0][3:-1].replace(',', '')
    } 
    items.append(data)
    
# 데이터 확인
df = pd.DataFrame(items)
df.tail(2)

(4) image download

  • Gmarket에 있는 이미지를 가져와서 다운로드하여 보여줌
# 디렉토리 생성
import os
os.makedirs('data') # 다시 생성하면 에러남

# 파일 리스트 출력
os.listdir('data')

# `15번째 이미지 가져옴
img_link = df.loc[14, 'img']
img_link

# requests 요청 및 status 확인 
response = requests.get(img_link)
response

# 파이썬 입출력 문법
with open('data/test.png', 'wb') as file:
    file.write(response.content)

# 이미지 저장 확인
os.listdir('data')

# pillow 패키지: 이미지 전처리
from PIL import Image as pil
pil.open('data/test.png')

3. selenium

  • 자동화를 목적으로 만들어진 다양한 브라우져와 언어를 지원하는 라이브러리
  • 파이썬을 이용하여 웹을 조종할 수 있는 방법이다.
  • 만약 웹 크롤링을 하려는데 작동하지 않는다면 selenium 방법으로 시도할 수 있다.
# 필요 라이브러리
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
  • 크롬브라우저 드라이버를 설치하여
  • 그 파일을 현재 사용하고 있는 파일과 같은 경로에 저장
  • 파일경로가 영어로 되어 있어야 오류가 안난다.
# 실행 시 브라우저 실행됨
driver = webdriver.Chrome()
# 페이지 이동
driver.get("https://daum.net")
# 브라우져 사이즈 조절
driver.set_window_size(200, 600)
# alert 다루기
driver.execute_script("alert('hello selenium!!!');")
# 확인버튼 클릭
alert = driver.switch_to.alert
alert.accept()
# 팝업 닫기 버튼 클릭
driver.find_element(By.CSS_SELECTOR, '.link_close').click()
# 브라우져 스크롤 조절
driver.execute_script("window.scrollTo(200, 300);")
# 브라우져 스크롤 조절
driver.execute_script("window.scrollTo(0, 0);")
# 브라우져 사이즈 조절
driver.set_window_size(800, 800)
# 문자열 입력
driver.find_element(By.CSS_SELECTOR, "#q").send_keys("파이썬")
# 문자열 입력
driver.find_element(By.CSS_SELECTOR, "#q").clear()
# 검색 버튼 클릭
driver.find_element(By.CSS_SELECTOR, '.btn_ksearch').click()
# 브라우져 종료
driver.quit()

회고

selenium 부분 듣다가 오늘 갑자기 고정키 이슈로 멘탈 터졌음

주피터랩에서 실행시킨다고 Shift+Enter 누르다가 shift만 여러번 눌러버린....

갑자기 키보드 안됌ㅋㅋㅋㅋㅋㅋ 오늘 체크아웃도 해야하고 셀프테스트도 쳐야하고 강의평가도 진행해야 하는데ㅋㅋㅋㅋ (마우스로 모든걸 해결가능 했다는 점 뿌듯ㅎㅎ)

고치려고 이래저래 하다가 포기했죠ㅋㅋㅋ 근데 지금은 어떻게 쓰냐고요? 수업 끝나고 구글링으로 어째저째 고쳤슴다

아무튼 웹크롤링을 배우면서 들었던 생각이 타교육을 수강하려고 받은 강의자료에서 배운 것과는 확실히 다르다고 생각이 들었어요!

웹크롤링 연습하고 나도 돈 버는 그 날 까지~~!!🌈💪🎉

profile
뒤늦게 프로그래밍을 시작한 응애

0개의 댓글