인프런 커뮤니티 질문&답변

윤진호님의 프로필 이미지
윤진호

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

네이버 뉴스의 날짜를 수집하고자 합니다.

작성

·

543

0

안녕하세요. FW 시즌 vs SS 시즌별로 피부 고민의 차이를 좀 분석해볼려고 하고요.

네이버 뉴스 크롤링 코드에서 날짜 부문을 추가해서 수집하려고 하는 데 오류가 발생하는 상황입니다.

날짜 HTML은 제대로 불러오는 것 같은데요... 출력에서 조금만 검토해주셨으면 하는 부분이 있습니다.

제가 추가로 작성한 부분은 빨간색으로 색칠해두었습니다.

------------------------------------------------------------------------------------------------------------------------

keyword = pyautogui.prompt("검색어를 입력하세요.")

lastpage = pyautogui.prompt("마지막 페이지번호를 입력하세요.")

 

# 엑셀 생성

wb = Workbook()

ws = wb.create_sheet(keyword)

 

# 행번호

row = 1

 

# 열 너비 조절

ws.column_dimensions['A'].width = 60

ws.column_dimensions['B'].width = 60

ws.column_dimensions['C'].width = 120

 

page_num = 1

for i in range(1, int(lastpage)*10, 10):

    print(f"{page_num}페이지 크롤링 중입니다.")

    response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}")

    html = response.text

    soup = BeautifulSoup(html, 'html.parser')

    articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출

    for article in articles:

        links = article.select("a.info")

        if len(links) >= 2: # 링크가 2개 이상이면

            url = links[1].attrs['href'] # 두번째 링크의 href 추출

            # 다시 request를 날려 준다

            response = requests.get(url, headers={'User-Agent' : 'Mozila/5.0'})

            html = response.text

            soup_sub = BeautifulSoup(html, 'html.parser')

            

 

            # 연예 뉴스 체크

            if "entertain" in response.url: 

                title = soup_sub.select_one(".end_tit")

                content = soup_sub.select_one("#articeBody")

                date = soup_sub.select_one("div.article_info > span > em")

            else: 

                title = soup_sub.select_one(".media_end_head_headline")

                content = soup_sub.select_one("#newsct_article")

                date = soup_sub.select_one("span.media_end_head_info_datestamp_time._ARTICLE_DATE_TIME")

 

            print("=======링크======= \n", url)

            print("=======제목======= \n", title.text.strip())

            print("=======본문======= \n", content.text.strip())

            print("=======날짜======= \n", date)

 

            # w저장

            ws[f'A{row}'] = url

            ws[f'B{row}'] = title.text.strip()

            ws[f'C{row}'] = content.text.strip()

            ws[f'D{row}'] = date.text.strip()  

            

            # 자동 줄바꿈 기능

            ws[f'C{row}'].alignment = Alignment(wrap_text=True)

            row = row + 1

            time.sleep(0.3)

    

    # 마지막 페이지 여부 확인하기

    isLastPage = soup.select_one("a.btn_next").attrs['aria-disabled']

    if isLastPage == 'true':

        print("마지막 페이지입니다.")

        break        

    page_num = page_num + 1

 

# 워드 문서 저장하기

wb.save(f"{keyword}_result.xlsx")

============================================================================================

=======날짜=======
 <span class="media_end_head_info_datestamp_time _ARTICLE_DATE_TIME" data-date-time="2022-06-05 09:42:02">2022.06.05. 오전 9:42</span>

출력이 이렇게되는 데요. 2022.06.05. 오전 9:42만 받아보게끔 하는 방법이 있을까요?


 

답변 1

0

윤진호님의 프로필 이미지
윤진호
질문자

어라 엑셀에서 결과물 볼 때에는 막상 잘 나오네요 ㅎㅎ 

 

이상 없습니다. 감사해요

윤진호님의 프로필 이미지
윤진호

작성한 질문수

질문하기