작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
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
안녕하세요~ 수강생님 ㅎㅎ
문제를 해결해 드리고 싶은데
들여쓰기가 제대로 안되어 있어서 코드를 동작시켜 볼 수가 없네요
들여쓰기 제대로 되어 있는 코드로 다시 보내 주시겠어요? ^^