강의자료/텍스트기반SW

파이썬으로 웹 크롤링 하고 바드에게 묻고 답하기

원당컴1 2023. 7. 5. 14:04

지난시간에 바드를 이용하여 질문하고 답변을 받는 방법을 살펴 보았는데요~

저는 바드를 이용해서 웹페이지의 내용을 읽어서 한줄 또는 두세줄로 요약 받는 프로그램을 만들어 보려고 합니다.

우리가 프로그램을 만들때 알고리즘이 어떻게 진행되는지 살펴 보고 그 것을 만들기 위해서는 어떤 기법들이 필요한지 살펴 봐야 됩니다.

일단 제가 만들려고 하는 프로그램은 다음과 같습니다.

  1. 해당 웹페이지 URL을 입력받는다.
  2. URL 의 내용을 가져와서 내용만 추출한다.
  3. 해당 내용을 바드에게 요약 정리해 달라고 요청한다.

아주 단순한 프로그램이네요

그래서 지난 시간에

2023.06.27 - [강의자료/텍스트기반SW] - 구글 바드 API 파이썬에서 사용하기

에서 바드에 묻고 답하기 기능을 살펴 봤습니다.

오늘은 URL을 이용해서 내용을 추출하는 방법에 대해 살펴 보도록 하겠습니다.

 

1. HTML에서 데이터 추출하기

HTML 내용을 찾을 때 뷰티플수프(Beautiful Soup) 가 사용됩니다.

1. 라이브러리 임포트

import requests                  # 웹 페이지의 HTML을 가져오는 모듈
from bs4 import BeautifulSoup    # HTML을 파싱하는 모듈

만약 bs4 가 설치되어 있지 않다면 pip install beautifulsoup4 를 이용해서 설치해 주시면 됩니다.

2. 웹페이지를 가져오고 BeautifulSoup 객체 생성

    # 웹 페이지를 가져온 뒤 BeautifulSoup 객체로 만듦
    response = requests.get('https://wondangcom.com/2292')
    soup = BeautifulSoup(response.content, 'html.parser')

지난 시간에 살펴본 웹페이지가  https://wondangcom.com/2292 이었어요.

이 내용을 response로 가져와서 내용을 soup에 담아 놓았습니다.

BeautifulSoup 의 첫번째 매개변수는 파싱할 문서,두번째 매개면수는 파싱에 사용할 파서로 html을 파싱할 때는 html.parse 를 사용하면 됩니다.

3. 태그 살펴 보기

여기서 내용만 추출해야 되므로 HTML 내용을 살펴 봐야 됩니다.

해당 웹페이지에서 F12 키로 개발자 모드로 진입해서 Elements 를 살펴 보면 HTML을 살펴 볼 수 있습니다.

찾고자 하는 태그를 찾아야 하므로 다음과 같은 절차로 찾아 봅니다.

위의 그림처럼 HTML 에서 해당 태그를 선택하면 태그에 해당하는 화면 전체가 왼쪽에서 선택됩니다. 이렇게 하위로 하나씩 하나씩 찾아 내려가다 보면 우리가 원하는 내용의 위치 태그를 찾을 수 있게 됩니다.

이렇게 찾다 보니 <div class="contents_style"> 부분이 우리가 원하는 내용인 것 을 확인 할 수가 있습니다.

그리고 내용은 <p> </p>태그 안에 있네요.

<p> 태그 안에 있는 내용만 추출해 보겠습니다.

 

4. content 추출하기

contents = soup.find('div', {'class': 'contents_style'})

먼저 <div class="contents_style">  부분을 contents 에 추출합니다.

    data=[]
    for ptag in contents.find_all('p'): #모든 p 태그를 찾아서 리스트로 만듬
        data.append(ptag.text)

    print(' '.join(data))

해당 내용중 p 태그 안에 있는 내용을 data 리스트에 담은 다음 각 리스트를 스페이스로 연결해서 출력해 봅니다.

 

이 내용을 지난 시간에 확인했던 바드에게 묻고 답변을 출력해 봅니다.

2. 바드에게 요약하는 문장 출력해 달라고 요청하기

    #바드 대답 듣기
    response = bardapi.core.Bard().get_answer(questionText)
    #print(response['content'],'\n')
    for i,choice in enumerate(response['choices']):
        print(f"Choice {i+1} : ", choice['content'][0],'\n\n')

간단하게 URL 을 이용하여 한줄 요약 내용 답변을 받았습니다.^^

 

이 글은 티스토리 내용 글이므로 티스토리 글이라면 모두 분석이 되는지 다음 시간에 살펴 보도록 하겠습니다.

 

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기