안녕하세요~ 일호15 입니다~
오늘은 발렌타인데이를 기념하고자, 파이썬 크롤링을 한단계 업그레이드하는 시간을 가져보겠습니다!
지난 포스팅들 참고하셔서, 크롤링에 대한 감을 잡아보신다면 이중 크롤링도 문제없이 헤쳐나갈 수 있겠습니다.
from bs4 import BeautifulSoup
import requests
url = 'https://dlfgh15.tistory.com/category/%EA%B3%A0%EB%93%B1%EC%88%98%ED%95%99'
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())
크롤링 개요 포스팅에서 살펴본 코드에서 url만 수정했습니다(이 블로그의 고등수학 카테고리 링크). 크롤링 개요 포스팅에 영상 남겨두었는데요. 이중 크롤링(?)은 해당 코드를 조금만 손보면 됩니다!
1 이중 크롤링(?)
뭔가 제 맘대로 이름을 갖다붙이긴 했는데, 실제로 쓰이는 용어는 아닌 것 같고요. 다만, 지금까지 배웠던 크롤링과 차별화를 하고자 멋진 이름을 지어보았습니다. 이를 지칭하는 용어가 있다면, 알려주시면 수정할게요..!
크롤링 여러번 할 것을 한번에 하자! 라는 의미로 지어봤는데요. 2중 for문의 존재를 아신다면, 그런 느낌이라고 봐주시면 될 것 같아요.
2 이중 크롤링 part.1
글 서론의 샘플 코드를 작동해보면, 제목이 6개만 나올거에요. 그런데, 크롤링 개요 포스팅의 영상을 보시면, 제목들이 무자비하게 제목들이 쏟아져 나오는 것을 보실 수 있는데요. 수정한 코드를 바로 살펴보겠습니다.
from bs4 import BeautifulSoup
import requests
for i in range(1,9): #8페이지까지 크롤링 해볼 예정
url = 'https://dlfgh15.tistory.com/category/%EA%B3%A0%EB%93%B1%EC%88%98%ED%95%99'
url_i = url + '?page=' + str(i)
selector = 'div.inner span.title'
R = requests.get(url_i)
B = BeautifulSoup(R.content, 'html.parser')
titles = B.select(selector)
for title in titles:
print(title.get_text())
무엇무엇이 달라졌는지 스스로 탐구해보는 시간 가져보겠습니다.
스포 시작합니다.
우선 for문 들어갔고요. 이와 결합해 url_i 라는 변수를 만들어 각각의 페이지를 지정해줬고, R 부분도 바뀌었네요.
기존의 코드블럭들은 for문에 맞게 들여쓰기 해주었고요.
크롤링을 할건데, 이를 1페이지에서도, 2페이지에서도, 8페이지에서도 하는 것. 이것이 간단한 구조의 이중 크롤링(?) 이라고 할 수 있겠습니다.
3 이중 크롤링 part.2
이번에는 제 블로그의 크롤링 카테고리를 클릭했을때, 첫페이지에 나오는 게시글들의 태그를 따오는 코드를 작성해볼게요.
from bs4 import BeautifulSoup
import requests
url_before = '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/c%20%3D%20%7B%27%ED%81%AC%EB%A1%A4%EB%A7%81%27%20%3A%20%27BeautifulSoup%27%7D'
selector1 = 'div.post-item > a'
R1 = requests.get(url_before)
B1 = BeautifulSoup(R1.content, 'html.parser')
urls = B1.select(selector1)
for url in urls:
url_after = 'https://dlfgh15.tistory.com' + url['href']
selector2 = 'div.tags a'
R2 = requests.get(url_after)
B2 = BeautifulSoup(R2.content, 'html.parser')
tags = B2.select(selector2)
for tag in tags:
print(tag.get_text(), end=' ')
print()
난이도가 상승한 느낌이 있는데요. 이게 제가 생각하는 이중 크롤링입니다. url_before에서 여러 url_after들을 불러 그 안에서 각각 태그를 추출하는 코드입니다. selector1, selector2만 제외하면 모두 지난 포스팅들에서 익혔던 내용인데요. 크롤링에 관한 제 글들을 잘 읽어왔다면, 나머지는 파이썬 언어에 관한 부분이니 분석해보시면 되겠습니다.
part2를 이해했다면 part1과 연동하여 여러 페이지에서 각각의 글들의 태그를 긁어올 수 있겠습니다. 이 블로그의 '고등수학' 카테고리에는 페이지가 많으니, 실습해보시면 좋을 것 같네요.

Part2와 Part3의 차이점을 밝히며 글을 마무리할게요. Part3은 최종 타겟이 되는 포스팅 페이지에 접속해야만 태그 정보를 읽어올 수 있어요. 포스팅을 보지 않은 상태에서는 태그를 확인할 길이 없는 것이죠. 이에 반해 Part2에서는 제목 정보를 추출했는데, 제목을 알아내기 위해 포스팅까지 접속할 필요는 없었네요!
다음 글 >> [파이썬 크롤링] 07 - CSS 셀렉터
'코딩 > 파이썬' 카테고리의 다른 글
[파이썬 크롤링] 07 - CSS 셀렉터 (0) | 2023.02.27 |
---|---|
[파이썬 크롤링] 05 - select, select_one (0) | 2023.01.31 |
[파이썬 크롤링] 04 - BeautifulSoup (0) | 2023.01.16 |
[파이썬 크롤링] 03 - requests (2) | 2023.01.03 |
[파이썬 크롤링] 02 - HTML/CSS (0) | 2022.12.17 |
댓글