안녕하세요! 일호15 입니다!
이 포스팅에 담겨있을 내용을 기대하셨다면 좋겠습니다.
야무지게 준비했거든요. 바로 가시죠!
from bs4 import BeautifulSoup
import requests
url = 'https://dlfgh15.tistory.com/category/%ED%8C%8C%EC%9D%B4%EC%8D%AC%20%EC%B2%AB%EA%B1%B8%EC%9D%8C%3A/a%20%3D%20%27%EA%B0%9C%EB%85%90%27'
selector = 'div.inner span.title' #HTML과 CSS를 알아야 제목 정보를 고를 수 있다.
R = requests.get(url)
B = BeautifulSoup(R.content, 'html.parser')
titles = B.select(selector)
for title in titles:
print(title.get_text())
크롤링 개요 포스팅에서 살펴본 코드를 바탕으로 하나하나 알아볼게요!
1 CSS selector
파이썬 기초를 떼었다는 가정 하에, 크롤링에 대한 포스팅들을 남겨두었습니다. requests, BeautifulSoup에 대한 설명도 마친 상태이고요.
이제 코드에서 해석이 필요한 부분은 titles = B.select(selector) 부분 뿐이네요! 그런데 이게 제일 어렵습니다ㅎㅎ 왜냐하면 CSS셀렉터에 대한 이해가 필요한 부분이기 때문입니다.
2 select
titles = B.select(selector)
select는 해당 조건에 맞는 모든 것을 고르는 메서드입니다. 1개 이상의 결과를 기대하기에, 좌변의 변수명도 titles로 복수 형태로 표기한 모습이고요. 이에 따라 titles는 리스트 데이터타입으로 저장됩니다.
이제 파이썬의 영역으로 들어가보겠습니다. titles는 [title1, title2, title3, . . .]의 형태로 저장되는데요. for문과 결합하여 각각의 데이터에 접근하여 무언가를 처리할 수 있을 것만 같은 느낌이네요.
for title in titles:
print(title.get_text())
위 코드가 실행되면, title 변수는 title1, title2, title3, . . . 등의 변수를 순회하며 title1.get_text(), title2.get_text(), title3.get_text(), . . . 를 출력하게 되겠네요. get_text()메서드가 무엇인지 궁금하다면, 스크롤을 맨 위로 올려 예제 코드에서 .get_text() 부분을 지우고 코드를 실행해보신다면 느낌 알게 되실거에요!
한가지 살펴볼 점은, 찾고자 하는 title이 한개일때 select 메서드를 사용하면 어떤 상황이 되는가 입니다.
only = B.select(selector)
딱 한개 있는 only 요소를 발견하여 크롤링하고자, select 메서드를 썼다고 가정해보겠습니다. 이 때에도 only는 리스트 포맷의 데이터로 저장이 됩니다. 다만 len(only)=1 이 될 것이고요. 이때는 반복문을 쓸 필요는 없겠지만, only.get_text() 메서드를 사용하면 에러가 뜬다는 점이 달라지는데요. get_text() 메서드는 리스트의 메서드가 아닌 문자열의 메서드이기 때문이에요. 이를 해결하기 위해서는 only[0].get_text() 정도로 처리해주면 되겠네요.
3 select_one
이번에는 select_one 메서드에 대해 알아보겠습니다. 이름에서 느낌을 받을 수 있듯이, 딱 하나만 선택한다는 의미입니다. only처럼 딱 한개 있는 것을 선택할 때도 적용할 수 있고, titles처럼 여럿 있는 것들 중 제일 먼저 검거되는 친구를 선택할 때 쓰기도 합니다.
title = B.select_one(selector)
title는 titles와 달리 문자열 포맷으로 데이터가 저장됩니다. 그리하여 바로 title.get_text()를 써먹을 수 있게 되고요. only를 선택하는 과정에서 select 메서드가 아닌 select_one 메서드를 썼다면, only[0].get_text()가 아닌 only.get_text()를 써주면 되겠네요.
참고로 2문단 for문에서의 title과 3문단에서의 title은 동명이인이에요. 이름만 같고 아예 다른 것임을 이해하고 넘어가셨으면 좋겠습니다! 이는 select, select_one 과 관계가 있겠습니다!
다음 글 >> [파이썬 크롤링] 06 - 이중 크롤링(?)
'코딩 > 파이썬' 카테고리의 다른 글
[파이썬 크롤링] 07 - CSS 셀렉터 (0) | 2023.02.27 |
---|---|
[파이썬 크롤링] 06 - 이중 크롤링(?) (0) | 2023.02.14 |
[파이썬 크롤링] 04 - BeautifulSoup (0) | 2023.01.16 |
[파이썬 크롤링] 03 - requests (2) | 2023.01.03 |
[파이썬 크롤링] 02 - HTML/CSS (0) | 2022.12.17 |
댓글