작성
·
231
0
안녕하세요. 강사님 아래 코드에서 '블랙핑크' 를 검색할 때
Traceback (most recent call last):
File "c:\pratice_crolling\심화1_\03_스포츠 뉴스 크롤링.py", line 52, in <module>
print(article_title.text.strip())
^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'text'
다음과 같은 오류가 뜹니다 ㅠㅠ CSS 선택자, 오타도 모두 맞게 확인이 되는데 왜 저 검색어만 오류가 뜰까요ㅠㅠ?
# -*- coding: euc-kr -*-
# 네이버에서 손흥민, 오승환과 같은 스포츠 관련 검색어 크롤링하기
import requests
from bs4 import BeautifulSoup
import pyautogui
import time
search = pyautogui.prompt("어떤 것을 검색하시겠어요?")
response = requests.get(f"https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query={search}&oquery=%EC%98%B7%EC%9C%BC%ED%99%98&tqi=i74G%2FdprvTossZPeMhCssssssko-058644")
html = response.text
soup = BeautifulSoup(html, "html.parser")
articles = soup.select(".info_group")
for article in articles:
# '네이버뉴스' 가 있는 기사만 추출한다. (<a> 하이퍼링크가 2개 이상인 경우에 해당)
links = article.select("a.info")
if len(links) >=2 :
url = links[1].attrs['href']
response = requests.get(url, headers={'User-agent':'Mozila/5.0'})
html = response.text
soup = BeautifulSoup(html, "html.parser")
# 스포츠 기사인 경우
if "sports" in url:
article_title = soup.select_one("h4.title")
article_body = soup.select_one("#newsEndContents")
# 본문 내에 불필요한 내용 제거 p태그와 div태그의 내용은 출력할 필요가 없다. 없애주자.
p_tags = article_body.select("p") # 본문에서 p 태그인 것들을 추출
for p_tag in p_tags:
p_tag.decompose()
div_tags = article_body.select("div") # 본문에서 div 태그인 것들을 추출
for div_tag in div_tags:
div_tag.decompose()
# 연예 기사인 경우
elif "entertain" in url:
article_title = soup.select_one(".end_tit")
article_body = soup.select_one("#articeBody")
# 일반 뉴스 기사인 경우
else:
article_title = soup.select_one("#title_area")
article_body = soup.select_one("#dic_area")
# 출력문
print("==================================================== 주소 ===========================================================")
print(url.strip())
print("==================================================== 제목 ===========================================================")
print(article_title.text.strip())
print("==================================================== 본문 ===========================================================")
print(article_body.text.strip()) #strip 함수는 앞 뒤의 공백을 제거한다.
time.sleep(0.3)
답변 2
0
안녕하세요.
코딩을 가장 쉽게 알려주는 크리에이터 스타트코딩입니다!
코드 굉장히 잘 짜 주셨는데요!
"sports" in url 대신 response.url 로 바꿔야 합니다.
url 변수에 들어 있는 주소
https://n.news.naver.com/mnews/article/003/0011975667?sid=106
response.url 에 들어 있는 주소
https://entertain.naver.com/read?oid=003&aid=0011975667
비교가 되시죠?
url = links[1].attrs['href']
a 태그의 href 속성값을 가져오는 것이고 (실제 주소와 다를 수 있습니다)
response.url 은 실제로 요청을 보내고 받은 주소 값이 들어 있습니다. (실제 주소와 같습니다)
0