(문제) BeautifulSoup라는 크롤링 도구를 이용하여 다음의 내용으로 웹크롤링해보기
검색어 입력받기:
프로그램 시작 시, 사용자로부터 검색어를 입력받습니다.
네이버 뉴스 검색 결과 크롤링:
입력받은 검색어를 사용하여 네이버 뉴스 검색 페이지를 요청합니다.
각 뉴스 기사 제목과 링크를 크롤링합니다.
최대 100개의 뉴스 기사를 크롤링합니다.
페이지를 순차적으로 요청하여 더 많은 결과를 가져옵니다.
CSV 파일로 저장:
크롤링한 데이터를 CSV 파일로 저장합니다.
파일명은 실행한 날짜를 포함하여 news_YYYYMMDD.csv 형식으로 저장합니다.
CSV 파일에는 "Title"과 "Link" 헤더를 포함하여 각 뉴스 기사 제목과 링크를 저장합니다.
(실 습)
Chatgpt와 질의와 답변을 통해 코드를 만들고 실행하여 보았습니다.
물론 먼저 필요한 웹페이지의 정보가 담긴 예시를 개발자모드에서 추출하여 Chatgpt에게 제시하고 답변을 요청하였습니다.
질문 1 :
-----------------------------------------------------------
위의 코드에 크롤링하는 내용을 더 추가하고자 합니다.
예를 들면 고령화 사회의 문제점을 네이버 검색란에 넣고 검색 결과, 제목과 해당 링크를 크롤링하고자 합니다. 예를 들면
<a href="https://blog.naver.com/dudtn7442/223338760835" class="dsc_link" data-cb-trigger="" data-cb-target="90000003_000000000000003400070A83_nx" onclick="return goOtherCR(this,'a=ugB_bsR*b.link&r=1&i=90000003_000000000000003400070A83&u='+urlencode(this.href));" target="_blank">노인인구비율이 7%이상이면 <mark>고령화사회</mark>, 14%이상이면 고령<mark>사회</mark>, 20%이상이면 초고령<mark>사회</mark>라고 합니다. 지금 우리나라는 65세 이상 어르신분들이 전체 인구의 13.8%이기 때문에... 오늘은 <mark>고령화</mark> 시대의 <mark>문제점</mark>과 이를 해결하기 위한 방안에 대해 알아보았습니다. 모두 도움이 되셨나요? 다음주 주제는 “스마트폰” 입니다. 스마트폰 없이 생활하시는 분 거의 없죠? 그만큼... </a>
-------------------------------------------------------
여기서 selector는 다음과 같습니다.
#main_pack > section.sc_new.sp_nreview._fe_view_root._prs_ugB_bsR > div > ul > li:nth-child(1) > div > div.detail_box > div.dsc_area > a
--------------------------------------------------------
이것을 참조해서 제목과 링크를 크롤링라는 코드를 작성해주세요
답변 1 : 네, 네이버 검색 결과에서 제목과 링크를 크롤링하는 코드를 작성해드리겠습니다. BeautifulSoup과 requests 라이브러리를 사용하여 해당 작업을 수행할 수 있습니다. 아래는 요청하신 코드를 포함한 전체 코드입니다.
이 코드는 다음과 같은 작업을 수행합니다:
네이버 검색 URL과 사용자가 입력한 검색어를 결합하여 검색 URL을 생성합니다.
HTTP GET 요청을 통해 검색 페이지를 요청하고 응답을 받습니다.
BeautifulSoup을 사용하여 HTML 파싱을 수행합니다.
CSS 선택자를 사용하여 검색 결과 목록에서 제목과 링크를 추출합니다.
추출한 제목과 링크를 CSV 파일로 저장합니다.
이 코드를 실행하면 사용자가 입력한 검색어에 대한 네이버 검색 결과를 naver_search_results_YYYYMMDD_HHMMSS.csv 파일로 저장합니다. CSV 파일에는 검색 결과의 제목과 링크가 포함됩니다.
제시한 대로 프로그램을 실행하니
Ø 검색어를 입력하세요 : 고령화 사회 문제점
Ø 검색 결과가 naver_search_results_20240624_134435.csv 파일로 저장되었습니다.
그런데 naver_search_results_20240624_134435.csv 파일에는 아무 내용도 없었습니다. 그래서
질문 2 : naver_search_results_20240624_134435.csv 형식으로 파일이 생성되는 것은 확인이 되었는데, Excel로 해당 파일을 여니 다음처럼 크롤링한 내용이 보이지않습니다. 어떻게 수정을 하면 될까요?
답변 2: 확인해본 결과, 크롤링한 내용이 CSV 파일에 저장되지 않는 문제는 여러 가지 원인으로 발생할 수 있습니다. 우선 크롤링한 내용이 제대로 추출되었는지 확인한 후, CSV 파일로 저장하는 부분에서 문제가 있는지 점검해보겠습니다.
다음은 추가로 검토할 점과 수정할 코드입니다:
HTML 구조 변경 확인
크롤링한 내용을 출력하여 확인
CSV 파일 저장 과정 검토
수정된 코드는 다음과 같습니다:
이 코드에서는 크롤링된 내용을 먼저 콘솔에 출력하여 실제로 제대로 크롤링이 되었는지 확인합니다. 만약 크롤링 결과가 비어 있다면 HTML 구조나 선택자에 문제가 있을 수 있습니다.
추가적으로, CSV 파일이 Excel에서 제대로 열리지 않는 경우는 인코딩 문제일 수 있습니다. 파일을 저장할 때 encoding='utf-8-sig'으로 변경해보십시오.
질문 3: 여전 히 크롤링이 안되어서 .csv 파일에 내용이 없습니다. 확인해서 다시 수정을 부탁드립니다.
답변 3: 확인해보니, 네이버의 검색 결과 페이지 구조가 변경되었을 가능성이 큽니다. 선택자를 다시 확인하고, 올바른 CSS 선택자를 사용하여 크롤링을 시도해보겠습니다.
다음은 수정된 코드입니다:
이 코드는 네이버 뉴스 검색 결과 페이지의 구조에 맞게 수정되었습니다. .news .news_tit 선택자를 사용하여 뉴스 기사 제목과 링크를 가져옵니다.
이 코드를 실행하여 다시 한 번 크롤링을 시도해보십시오. 올바른 결과를 얻을 수 있을 것입니다.
질문 4 : 여전히 아무 결과가 안나옵니다. 어떻게 하면 네이버 검색란에 "특정 검색어"를 입력했을 때, 해당되는 "제목"과 "링크"를 크롤링할 수 있을까요? 코드 작성을 부탁드립니다
답변 4 : 네이버 검색 결과 페이지의 HTML 구조가 자주 변경될 수 있기 때문에, 올바른 선택자를 사용하는 것이 중요합니다. 네이버 뉴스 검색 결과의 구조를 다시 확인하고, 올바른 CSS 선택자를 사용하여 제목과 링크를 추출해 보겠습니다.
다음은 네이버 뉴스 검색 결과에서 제목과 링크를 크롤링하는 수정된 코드입니다:
이 코드는 다음과 같이 작동합니다:
base_url에 네이버 뉴스 검색 URL을 설정하고, 사용자가 입력한 검색어를 추가하여 검색 URL을 만듭니다.
HTTP GET 요청을 보내어 검색 페이지의 HTML을 가져옵니다.
BeautifulSoup을 사용하여 HTML을 파싱하고, a.news_tit 선택자를 사용하여 뉴스 기사 제목과 링크를 추출합니다.
추출된 제목과 링크를 리스트에 추가하고, 이를 CSV 파일로 저장합니다.
이 코드가 담긴 프로그램을 샐행하고 제시어를 입력하니, 네이버 검색 결과에서 제목과 링크를 크롤링하여 CSV 파일로 저장되었습니다.
그리고 naver_search_results_20240624_141255.csv을 열어보니 고령화에 대한 내용과 관련된 링크가 잘 저장되어 있었습니다.
(결론) 앞서 Trafilatura 도구를 이용하여 특정 url의 본문 내용을 크롤링하는 실습을 하였고 또 다른 BeautifulSoup라는 도구를 이용하여 특정한 단어(원하는 제시어)를 가지고 웹사이트에서 정보를 추출할 수 있었습니다.
이런 웹크롤링으로 통해 “돌봄서비스를 위한 대화형 음성 챗봇 구현하기”의 돌봄서비스를 위한 주제별 컨텐츠 확보가 가능할 것으로 판단합니다.
#11기문과생도AI