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
와 class
id
: 하나의 웹페이지에 하나만 쓸 수 있는 고유한 이름으로 <태그이름 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()
함수