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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

SSLError 해결하는 방법

코드가 작동이 되었다가 다시 안되는데요 ㅠㅠ

작성

·

202

·

수정됨

0

분명히 작동을 잘 했었는데,

제가 어디서 잘못을 한것인지 아래와 같은 에러가 반복해서 발생합니다.

startcoding/Chapter04/11.마지막페이지확인하기.py", line 62, in <module>

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

^^^

NameError: name 'url' is not defined

 

강의를 뒤로가서 다시 작성해봐도... 이제는 02.본문내용스크롤부터 에러가 발생하고,

Chapter04/02.뉴스본문내용크롤링하기.py", line 17, in <module>

print(content.text)

^^^^^^^^^^^^

AttributeError: 'NoneType' object has no attribute 'text'

"10.크롤링결과엑셀저장하기"에서도 돌아가다가 2페이지부터 이런 에러가 발생합니다.

startcoding/Chapter04/10.크롤링결과엑셀저장하기.py", line 63, in <module>

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

^^^^^^^^^^

AttributeError: 'NoneType' object has no attribute 'text'

제가 도대체 어디를 잘못하고 있는 걸까요 ㅠㅠ

 



 

import requests

from bs4 import BeautifulSoup

import time # Time module 불러오기

import pyautogui

from openpyxl import Workbook

from openpyxl.styles import Alignment


# 사용자입력푸드

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

lastpage = int(pyautogui.prompt("몇 페이지까지 크롤링 할까요?"))


# 엑셀 생성하기

wb = Workbook()


# 엑셀 시트 생성하기

ws = wb.create_sheet(keyword)


# 열 너비 조절

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

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

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


# 행번호

row = 1


# 페이지번호

page_num = 1

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

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

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

html = response.text

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

articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출(ctrl+F, div.info_group 검색후 10개로 확인)

for article in articles:

links = article.select("a.info") # 리스트: a 태그인데, class가 info인 것들 가지고 오기

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

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

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

html = response.text

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


# 연예 뉴스 체크

if "entertain" in response.url:

title = soup.select_one(".end_tit")

content = soup.select_one("#articeBody")

elif "sports" in response.url:

title = soup.select_one("h4.title")

content = soup.select_one("#newsEndContents")

# 본문 내용 안에 불필요한 div 삭제 (기사 본문 이후 내용들)

divs = content.select("div")

for div in divs:

div.decompose()

paragraphs = content.select("p")

for p in paragraphs:

p.decompose()

else:

title = soup.select_one(".media_end_head_headline")

content = soup.select_one("#newsct_article")



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

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

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

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

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

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

# 자동 줄바꿈

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

row = row + 1

time.sleep(0.3) # 프로그램을 0.3초 정도 휴식 주기 (서버 부담 줄여주기, 프로그램 안정성 up)

page_num = page_num + 1


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

 

답변 1

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

안녕하세요~ 수강생님 ㅎㅎ

 

문제를 해결해 드리고 싶은데

들여쓰기가 제대로 안되어 있어서 코드를 동작시켜 볼 수가 없네요

 

들여쓰기 제대로 되어 있는 코드로 다시 보내 주시겠어요? ^^

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기