본문 바로가기

크롤링

게시물 수집하기 예제

게시물 수집하기 예제

게시판에 올라와 있는 게시물을 가져와야 하는 경우에 코드를 이용하여 수집하는 예제 코드입니다.

파이썬에서 제공하는 requests와 BeautifulSoup를 이용하여 가져옵니다.

 

예제 소스 코드에서 사이트의 주소는 뺐습니다.

물론 사이트 주소 뒷 부분은 대상 사이트에 따라서 각각 달라집니다.

 

사이트 내 게시물을 가져올 경우에는 해당 페이지의 html 구조를 파악하고,

개발자도구를 이용하여 가져올 대상을 선택하는 등의 작업을 해야 합니다.

 

아래 코드를 분석하여, 여러분의 게시물 크롤러를 만들어 보시기 바랍니다.

 

import requests
from bs4 import BeautifulSoup as soup

# https://사이트주소/board/board.php?bo_table=sub0501&page=2&mnuno=M0000046&menu_group=4&sno=0401&page=1
notices = []
for pNum in range(1,11):
    url = 'https://사이트주소/board/board.php?bo_table=sub0501&page=2&mnuno=M0000046&menu_group=4&sno=0401&page='+str(pNum)
    res = requests.get(url)
    html = soup(res.content, 'html.parser')
    
    tbody = html.find('tbody',{'class':'center'})
    # 게시물 tbody 태그 안에 있는 tr태그를 모두 찾아서 trs 변수에 담는다
    trs = tbody.findAll('tr')
    
    for tr in trs:
        tds = tr.findAll('td')
        # td 내용을 담을 리스트 변수를 만든다
        noti_td = []
        # tds 변수에 담겨 있는 값을 인덱스와 값으로 뽑아서 반복한다 (idx:위치값)
        for idx, td in enumerate(tds):
            # 위치가 4이면 (첨부파일 이미지 아이콘) 값을 제외한다
            if idx != 4:
                # 개행 문자나 공백 같은 특수문자를 삭제하고 text값을 가져온다
                noti_td.append(td.get_text(strip=True))
        notices.append(noti_td)
    notices

import pandas as pd
noti_df = pd.DataFrame(notices, columns = ['번호','제목','작성자','작성일','조회수'])
# noti_df.to_excel("test.xls")
noti_df