📖 크롤링 (Crawling)
크롤링 : 웹사이트에서 내가 원하는 내용을 자동으로 추출하는 기능
ex : 실시간 검색어 추출, 쇼핑몰의 인기 상품 추출,...
1. 크롤링 의미 알기
- at 파이썬, 라이브러리가 多. 라이브러리 여러개를 조합하여 원하는 기능을 사용
- 주요 라이브러리
- requests : 웹페이지 호출
- bs4 (BeautifulSoup) : 웹페이지 분석(크롤링)
- '웹페이지 호출' 의 의미
- 웹브라우저에 IP/URL 주소 입력 → 해당 웹페이지에 접속; HTML 언어 파일이 시각화되어 모니터에 노출
- 즉, '웹페이지 호출' = 해당 웹페이지의 HTML 파일's 코드를 호출
- 파싱 (parsing) : 태그로 이루어진 HTML 파일's 문자열의 의미를 분석하는 것
2. 크롤링 코드 패턴
* BeautifulSoup : 대문자로 시작. 사실상 Class
# [크롤링 코드 패턴]
# 1. 라이브러리 호출
import requests
from bs4 import BeautifulSoup
# 2. 웹페이지 호출, 변수에 저장
url = "http://example.com"
response = requests.get(url) # 구조화x 상태
# 3. 웹페이지 파싱, 변수에 저장
soup = BeautifulSoup(response.content, "html.parser") # .content 를 통해 구조화o # BeautifulSoup의 "html.parser" 함수를 통해 분석
# 4. 필요한 데이터만 추출, 변수에 저장
data = soup.find("title") # 찾으려는 태그명 : title
# 5. 추출한 데이터 활용
print(data.get_text()) # .get_text() : 태그 다 떼고, 그 안의 문자열만 반환
# = print(data.string)
3. 같은 태그가 여러개일 때
1) 특정 태그만 찾기 : find()
# [find 기본]
data = soup.find("p")
# [find 섬세 버전]
# 1. 태그/속성&속성값
data = soup.find("p", class_="") # class_ 언더바 꼭 붙이기!
# 2. 태그/속성값
data = soup.find("p", "")
# 3. 태그/속성&속성값 딕셔너리
data = soup.find("p", attrs={"class": "", "id": "", ...})
# 4. 속성&속성값
data = soup.find(class_="")
2) 모든 태그 찾기 : find_all()
# [같은 태그들 중, 첫 번째 태그만 찾기]
data = soup.find("p")
print(data) # 태그 + 문자열 출력
print(data.string) # 문자열만 출력
# [같은 태그들 모두 찾기]
data = soup.find_all("p")
print(data) # 리스트 출력
# print(data.string) # Error; 리스트이므로 문자열로 출력 불가
for item in data:
print(item.string) # 리스트 내 요소 하나하나를 문자열로 출력
# [모든 태그 찾은 뒤, 인덱싱을 통해 n 번째 태그 추출하기]
# 스타일이 같은 태그 모두 찾기
data = soup.find_all("p", "text_info")
for item in data:
print(item.string)
# 스타일이 같은 태그 모두 찾은 뒤, 인덱싱을 통해 n번째 태그 추출
data = soup.find_all("p", "txt_info")
print(data[1].string)
'Python > 08. 크롤링과 웹 기본' 카테고리의 다른 글
02. 실전 크롤링 (0) | 2024.07.28 |
---|