Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Star_project

python 직업교육 파이썬을 이용한 자동화 스크립트 본문

Frontend-Programing/HTML

python 직업교육 파이썬을 이용한 자동화 스크립트

star빛 2022. 4. 23. 23:47

1.     BASE_URL를 기본으로 소스 코드를 참조하여 해당 페이지의 테이블의 내용을 이중 리스트로 만든다. (20)

조건 : 이미지는 포함하지 않는다.

      description 의 값은 최초 5글자만 포함한다.

 

2.     이중 리스트의 내용을 CSV 파일로 생성한다. (20)

 

3.     코드를 완성하여 CSV 파일을 작업디렉토리에 생성 (60)

 

 

import requests
from bs4 import BeautifulSoup
import csv
import pprint

BASE_URL = 'http://www.pythonscraping.com'


def create_list_from_table(table_tag):

    # CSV 파일로 만들기 위해서 2중 리스트 생성
    gifts = []

    # 헤더에 해당하는 1번째 로우 작성
    headers = []
    header_tag = table_tag.find('tr')
    for th_tag in header_tag.find_all('th'):
        headers.append(th_tag.text.strip())
    gifts.append(headers)

    # 선물 레코드 작성
    for tr_tag in table_tag.find_all('tr'):
        gift = []
        for td_tag in tr_tag.find_all('td'):
            if td_tag.text.strip() != '':
                # 좌우 공백을 제거하고 텍스트 속에 \n문자를 공백으로 변경
                # 최초 5글자만 포함
                gift.append(td_tag.text.strip().replace('\n', ' ')[:5])
            
            # 이미지는 저장 안함
            elif td_tag.find('img').get('src'):
                continue

        if not gift:
            continue
        gifts.append(gift)

    # pprint.pprint(gifts)
    return gifts


def create_csv_file(lol, filename):
    with open(filename, 'w', encoding='utf-8') as file:
        writer = csv.writer(file)
        for l in lol:
            writer.writerow(l)


def main():
    res = requests.get(BASE_URL + '/pages/page3.html')
    soup = BeautifulSoup(res.text, 'lxml')

    # 테이블 태그 확보
    table_tag = soup.find(id='giftList')

    gifts = create_list_from_table(table_tag)
    create_csv_file(gifts, 'gifts.csv')

    print('job completed..')


if __name__ == '__main__':
    main()