데이터 분석/크롤링
[AI개발자 부트캠프 Elice] 웹 스크래핑과 Selenium
temporubato108
2024. 11. 20. 22:23
1. 웹 스크래핑과 Selenium
웹 스크래핑이란, 웹사이트에서 원하는 데이터를 수집하고 가공하는 행위입니다.
Selenium은 웹 테스트 자동화 도구로, 파이썬(또는 자바) 라이브러리로 사용합니다. Selenium은 브라우저를 제어하는 기능이 있어 웹 스크래핑에 용이합니다.
2. 태그 이름으로 요소 찾기
Point I
Selenium 공통 설정
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Firefox() # 실행 브라우저
driver.get('https://news.naver.com')
...
driver.quit()
- 해당 프로그램을 수행할 브라우저를 선택하여 실행하며, 다양한 브라우저 (ex. Android, Safari, Chrome 등)를 지원합니다.
Tips!
코드가 정상적으로 작동하지 않고 에러 발생 시 with 표현식을 사용하면 꺼지지 않은 브라우저가 메모리를 점유하는 현상을 방지할 수 있습니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
with webdriver.Firefox() as driver: # 실행 브라우저
driver.get('https://news.naver.com')
...
Point II
원하는 요소 단일 선택
find_element(By.TAG_NAME, 'tag_name'): 해당 태그를 가진 요소를 찾아 반환하는 메소드
<body>
<h1>Web Scraping</h1>
<div>
<p>(한글) 웹 스크래핑</p>
</div>
<p>원하는 데이터를 수집한다.</p>
<p>데이터를 가공한다.</p>
</body>
e = driver.find_element(By.TAG_NAME,'p')
print(e.text)
# (한글) 웹 스크래핑
- 해당 요소가 여러 개 있다면 맨 위에 적힌 요소가 출력됨
Point III
원하는 요소 복수 선택
find_elements(By.TAG_NAME,'tag_name'): 해당 태그를 가진 요소를 전부 찾아 리스트로 반환하는 메소드
<body>
<h1>Web Scraping</h1>
<div>
<p>(한글) 웹 스크래핑</p>
</div>
<p>원하는 데이터를 수집한다.</p>
<p>데이터를 가공한다.</p>
</body>
e_list = driver.find_elements(By.TAG_NAME, 'p')
e = e_list[1] # 2번째 p
print(e.text)
# 원하는 데이터를 수집한다.
Point IV
요소 내의 요소를 선택할 때
<body>
<h1>Web Scraping</h1>
<p>원하는 데이터를 수집한다.</p>
<p>데이터를 가공한다.</p>
<div>
<p>(한글) 웹 스크래핑</p>
</div>
</body>
e = driver.find_element(By.TAG_NAME,'div') \
.find_element(By.TAG_NAME,'p')
print(e.text)
# (한글) 웹 스크래핑
3. class, id로 요소 찾기
tag_name 만으로 요소를 찾기엔 무리가 있기 때문에, class_name, id를 활용해서 찾을 수 있습니다.
Point I
class 이름으로 요소 찾기
Point II
id로 요소 찾기
Point III
여러 method 같이 사용하기
4. 요소의 주소, XPath
Point I
Point II
Point III
XPath 문법
- /: 현재 위치의 자식 노드만 검색
- //: 현재 위치의 모든 자식 노드에서 검색
- *: 와일드 카드로 경로에 있는 모든 노드를 의미
- []: 필터 표현식으로 인덱스, 속성 등을 통해 특정 요소 검색
- [index]: 검색된 노드들 중 index(1부터 시작)에 해당하는 노드 반환
- [@attr]: 검색된 노드들 중 해당 속성을 가지고 있는 노드를 모두 반환
- [@attr="value"]를 사용할 경우, 검색된 노드둘 중 해당 속성과 속성값이 완벽히 일치하는 노드를 반환
5. 브라우저와 XPath의 활용
Point I
웹 페이지 내 요소의 XPath 알아내기
- 브라우저에서 찾고 싶은 요소 우클릭 - 검사로 HTML 문서 찾기
- HTML 문서에서 요소를 우클릭하여 XPath 복사
Point II
XPath로 요소 찾기