inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1단계 - class 선택자 고급 테크닉, 특수문자 처리 방법

'블랙핑크' 검색 시에만 오류가 뜨는 현상

308

작성자 없음

작성한 질문수 0

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)

python 웹-크롤링

답변 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

hhs0995

response.url 이 어떤 기능을 하는지, 어떨 때 써야하는지 알고 싶습니다!

셀레니움 환경설정 오류

0

46

2

네이버 로그인 관련

0

254

2

안녕하세요 셀레니움에 대해서 질문

0

85

1

크롤링 연습사이트 문의

0

95

2

선택자 질문

0

71

2

'특정 요소가 나타날 때까지 스크롤' 부분 에러

0

76

2

자동 로그인 질문

0

86

2

44강 제목, 링크

0

105

1

원하는 값이 없을 때

0

89

2

크롤링한 링크가 엑셀로 들어가면 작동이 안되요

0

227

2

셀레니움 PDF자료는 받을 수 있나요

0

100

2

글목록 추출하기

0

97

2

메일 자동화 로그인 중복방지문자해결 오류 및 명시적 대기 질문

0

88

2

강의 노트가 어디에 있는건가요?

0

80

2

강의 커리큘럼 질문

0

97

1

조건문 else 사용하지 않는 이유

0

76

2

셀레니움으로 접근할 수 없는 경우

0

95

2

웹페이지 변경

0

70

2

자바스크립트로 태그 선택 시 질문입니다.

1

64

2

수료증은 어떻게 받나요?

0

119

2

class명을 활용하여 선택자를 만들지 않는 경우..?

0

60

2

드라이버가 안 열려요

0

79

2

이거 해결방법 아시는 분?

0

121

2

네이버 지식인 크롤링..

0

201

2