본문 바로가기
코딩/파이썬

[파이썬 크롤링] 06 - 이중 크롤링(?)

by 일호15 2023. 2. 14.

안녕하세요~ 일호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만 수정했습니다(이 블로그의 고등수학 카테고리 링크). 크롤링 개요 포스팅에 영상 남겨두었는데요. 이중 크롤링(?)은 해당 코드를 조금만 손보면 됩니다!

 

>> [파이썬 크롤링] 01 - 개요

 

 

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 셀렉터

반응형

댓글