본문 바로가기

프로젝트 목록/ParseWEB

ParseWEB [1-9] 다음 블로그 게시물 파싱

이번 강좌에서는 다음 블로그 게시물의 내용을 파싱해보도록 하겠습니다.


해당 강좌에서는 다음에서 운영하고 있는 공식 블로그인 아!아! 블로그에 올라온 게시물을 파싱해보겠습니다.

사전 정보 수집

이번 강좌에서도 모바일 페이지를 사용해서 파싱을 진행해보겠습니다.


파싱하려고 하는 게시물은 아래와 같습니다.

[2017 블로그 결산] 다음블로그 모두의 결산을 시작합니다~


그리고 이번에도 개발자 도구에 있는 "요소 선택" 기능을 이용해서 필요한 부분을 알아내려고 합니다.

해당 방법을 잘 모르시겠다면 이전 강좌를 참조해주시기 바랍니다.

요소 선택 기능으로 게시물의 첫 번째 줄인 "안녕하세요 다음블로거 여러분~"를 선택해봅시다.

그러면 태그는 p이고 아무런 속성을 가지고 있지 않은 것을 확인할 수 있습니다.


해당 요소에서 계속 부모로 거슬러 올라가서 본문의 내용을 모두 포함하는 가장 작은 요소를 찾아봅시다.

이를 만족하는 요소는 태그는 div이고 id 속성으로는 article을 가진다는 것을 알 수 있습니다.


즉 해당 요소에서 p 태그를 뽑아내서 텍스트를 가지고 오고, img 태그를 뽑아내서 이미지를 가지고 오면 됩니다.

이 내용을 기반으로 해서 코드를 작성해보도록 합시다.

구현하기

from bs4 import BeautifulSoup
import requests

def tag_helper(tag):
    if tag.name == 'img':
        # img tag
        return '[IMG]'
    elif tag.name == 'p':
        # p tag
        return tag.get_text()
    else:
        return ''

def get_content():
    url = 'http://m.blog.daum.net/ahahblog/13757768'
    req = requests.get(url)
    content = req.content

    soup = BeautifulSoup(content, 'html.parser')
    contents = soup.select_one('div#article')

    result = list(map(tag_helper, contents.find_all(['img', 'p'])))

    return result

contents = get_content()

print(contents)
for item in contents:
    print(item)

시연 결과

아래 이미지와 같이 해당 게시물에 있는 내용을 가지고 오는 것을 볼 수 있습니다.


더 생각해보기

아래 내용은 직접 생각해서 구현을 해보시기 바라며 해당 내용에 대한 답안은 따로 제공하지 않습니다.


  1. 이미지 태그 부분을 '[IMG]'가 아니라 해당 이미지의 주소가 나오도록 수정해봅시다.
  2. 동영상이 있는 게시물은 동영상에 대한 정보가 나오게끔 코드를 수정해봅시다.
  3. 게시글의 색깔이나 굵기에 대한 정보도 같이 나오도록 한다면 어떻게 해야 할지 생각해봅시다.