
Tip! 크롤링(crawling) 가능 여부 확인
- 크롤링을 무작정 하다가 보면 맞게 작성한 것 같은 코드에서 아무 데이터도 못 얻고 있는 것을 확인할 수 있음
- 이럴 때 크롤링 할 사이트가 크롤링이 가능한 사이트인지 확인해야 함
- 크롤링 가능 여부를 확인하는 방법은 사이트명 뒤에
/robots.txt를 붙여 확인 가능
html 문서를 싹 긁어옴html 문서에서 원하는 것을 골라서 사용# 설치
pip install requests
html 문서를 가져올 때 사용하는 패키지requests는 사용자 친화적인 문법을 사용하여 다루기 쉬우면서 안정성이 뛰어남urllib 패키지보다 자주 사용됨# 사용 방법
# requests 패키지 가져오기
import requests
# 가져올 url 문자열로 입력
url = 'https://www.naver.com'
# requests의 get 함수를 이용해 해당 url로 부터 html이 담긴 자료를 받아옴
response = requests.get(url)
# 정상적으로 받아졌다면 200이라는 상태코드를 반환
print(response.status_code)
# 얻고자 하는 html 문서가 여기에 담기게 됨
html_text = response.text
# 설치
pip install selenium
selenium 패키지는 chromedriver를 이용해 chrome을 제어하기 위해 사용selenium을 이용# 사용 방법
# selenium의 webdriver를 사용하기 위한 import
from selenium import webdriver
# selenium으로 무엇인가 입력하기 위한 import
from selenium.webdriver.common.keys import Keys
# 페이지 로딩을 기다리는데에 사용할 time 모듈 import
import time
# 크롬 드라이버 실행 (경로 예: '/Users/Roy/Downloads/chromedriver')
driver = webdriver.Chrome('chromedriver의 경로를 입력할 것')
# 크롬 드라이버에 url 주소 넣고 실행
driver.get('https://www.google.co.kr/')
# 페이지가 완전히 로딩되도록 3초동안 기다림
time.sleep(3)
# 검색어 창을 찾아 search 변수에 저장
search = driver.find_element_by_xpath('//*[@id="google_search"]')
# search 변수에 저장된 곳에 값을 전송
search.send_keys('코딩유치원 파이썬')
time.sleep(1)
# search 변수에 저장된 곳에 엔터를 입력
search.send_keys(Keys.ENTER)
Tip! 크롬 드라이브 자동 설치
뻥뚫리는 파이썬 코드 모음 - 셀레니움 설치와 크롬 드라이버 자동 처리from selenium import webdriver import chromedriver_autoinstaller # 크롬 드라이버 버전 확인 chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0] try: driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe') except: chromedriver_autoinstaller.install(True) driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe')
# 설치
pip install beautifulsoup4
beautifulsoup4라는 패키지는 매우 길고 정신없는 html 문서를 잘 정리되고 다루기 쉬운 형태로 만들어 원하는 것만 쏙쏙 가져올 때 사용import requests
# 주로 bs로 이름을 간단히 만들어서 사용함
from bs4 import BeautifulSoup as bs
response = requests.get('https://www.google.co.kr')
# html을 잘 정리된 형태로 변환
html = bs(response.text, 'html.parser')
# find 함수로 특정 이미지를 선택하는 코드
google_logo = html.find('img', {'id':'hplogo'})

<>)로 감싸서 표현/)가 존재<img> <br> <hr> 등과 같이 종료 태그 없이 시작 태그만을 가지는 태그를 빈 태그(empty tag)라고 함
id와 classid : 하나의 웹페이지에 하나만 쓸 수 있는 고유한 이름으로 <태그이름 id="속성값">와 같이 쓰임class : 비슷한 형태를 가진 요소에 여러번 사용할 수 있는 이름으로 <태그이름 class="속성값">와 같이 쓰임Tip! HTML 태그 종류
.css 파일로 저장
;)으로 구분하여 포함할 수 있으며, 중괄호({ })를 사용하여 전체를 둘러쌈:)으로 연결;)으로 끝마침Tip! CSS 선택자 종류
Tip! 추가 내용

html을 requests 혹은 urllib 패키지를 이용해 가져와서 beautifulsoup 패키지로 파싱하여 원하는 정보를 수집url의 html을 받아와서 수집하기 때문에 수집 속도가 빠르다는 특징이 있지만, 여기저기 모두 사용할 수 있는 범용성은 떨어진다는 특징이 있음selenium 패키지로 chromdriver를 제어url로 접속해서 로그인을 하거나 버튼을 클릭하는 식으로 원하는 정보가 있는 페이지까지 도달driver.find_elements_by_ 함수를 이용해 html을 곧바로 지목해서 추출할 수도 있고, driver.page_source 함수를 이용해 전체 html을 받아 올 수도 있음html 전체를 받아와서 beautifulsoup로 하면, 페이지에서 하나하나 가져오는 것보다 수집 속도가 빠른 특징이 있음Tip! find 관련 함수
selenium패키지
driver.find_element(s)_by_의 뒤에xpath(),id(),class_name(),tag_name()를 사용beautifulsoup패키지
find_all(),find()함수