정적 웹 페이지 | 동적 웹 페이지 |
소스에서 화면에 렌더링된 내용을 모두 찾을 수 있음 | 소스에서 화면에 렌더링된 내용을 일부 찾을 수 없음 |
HTML / CSS로만 구현 | HTML / CSS 외 JavaScript 활용 |
Selenium
: 웹 브라우저를 자동화하는 도구 모음. 다양한 플랫폼과 언어를 지원.
pip install selenium / conda install selenium으로 설치 가능
from selenium import webdriver
driver = webdriver.Chrome('크롬드라이버 위치')
url = 'url 주소'
driver.get(url) #정적 - requests.get()
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser') #정적 - html.text
select
1)a.text
2)title[0].contents ->list로 반환 / string으로 반환하려면 title[0].contents[0]
3)select('~')[0].text
pd_data.to_excel('./머시기.xlsx', index = False)
결과를 엑셀로 저장하는 코드이다.
BeautifulSoup를 사용하지 않고 Selenium만 사용하면 아래와 같이 작성한다.
driver = webdriver.Chrome('위치')
url = '~'
driver.get(url)
datas = driver.find_elements_by_css_selector('table > tbody > tr')
for data in datas:
title = data.find_elements_by_css_selector('div.title > span > a')[0].text
이때 find_elements_by_css_selector는 리스트로 반환된다.
Selenium + BeautifulSoup | Selenium만 | |
웹페이지 접속 | html 정보 다운로드 완료 -> 브라우저에서 정보를 가져오지 않음 | 웹페이지 연결 유지 필요 |
웹페이지 동작 | 불가능 | 클릭, 입력 등 가능 |
크롤링 속도 | 빠름 | 느림 |
=>Selenium을 이용해 웹페이지에 접속해 값을 입력하거나 클릭하는 등 작업 진행 후,
html을 다운로드해 BeautifulSoup으로 정보를 추출하는 것이 일반적이다.
.strip() : 문자 앞뒤 여백 제거
.astype('int') :타입 변환
.str.replace('만','0000')[0:10] : 대체
특이점들
browser = webdriver.Chrome('위치')
url = 'url'
browser.get(url)
html = browser.page_source
news = BeautifulSoup(html,'html.parser')
for i in range(1,6):
as = browser.find_elements_by_css_selector('ul > li:nth-child('+str(i)+') > ~~')[0].text
bs = browser.find_elements_by_css_selector('ul > li:nth-of-type('+str(i)+') > ~~')[0].text
# nth-child를 Bs에서는 nth-of-type으로 변경해야함
자동 로그인 코드
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #키조작함수
driver = webdriver.Chrome('위치')
driver.implicitly_wait(3) #대기
driver.get('url주소')
id = driver.find_element_by_name('id') #이름으로 접근
#id = driver.find_element_by_id('id') #아이디로 접근
idkeys = '~'
driver.find_element_by_name('id').send_keys(idkeys)
id.submit() #전송. 로그인 버튼 클릭과 같음
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #키조작함수
import pyperclip #텍스트 복사 함수
driver = webdriver.Chrome('위치')
driver.implicitly_wait(3) #대기
driver.get('url주소')
driver.find_element_by_name('id').click() #선택
pyperclip.copy('텍스트') # 텍스트 복사
driver.find_elebent_by_name('id').send_keys(Keys.CONTROL,'v')
driver.find_element_by_name('PW').click() #선택
pyperclip.copy('텍스트') # 텍스트 복사
driver.find_elebent_by_name('pw').send_keys(Keys.CONTROL,'v')
driver.find_element_by_name('log.login').click()
'정리 > 정보 요약' 카테고리의 다른 글
[정보] 인스타 크롤링 해보기 (0) | 2021.07.20 |
---|---|
[정보] 정규식 표현 (0) | 2021.07.20 |
[정보] 정적 웹크롤링 (0) | 2021.07.19 |
댓글