• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

크롤링 초보

19.08.06 21:46 작성 조회수 138

0

안녕 하세요. 파이썬 크롤링 베이직 강의를 듣고 있는 사람입니다.

아래와 같은 에러를 해결 하려면 어떻게 해야 하나요??

패턴으로 실습하며 익히기: CSS selector 사용해서 크롤링하기1

https://www.inflearn.com/course/Python-crawling-basic/lecture/21277

 

아래와 같이 파일 공유 드립니다.

 

import requests

from bs4 import BeautifulSoup

 

res = requests.get('https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=101&oid=011&aid=0003599217')

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

 

data= soup.select("#articleBodyContents > strong.media_end_summary")

 

print (data)

""" 

print (data) 했을 경우

 --> 결과 [<strong class="media_end_summary">국토부, 다음주 초 세부안 발표</strong>]

 "국토부, 다음주 초 세부안 발표" 이렇게 나오게 하려면 어떻게 해야 하나요??

 

 

print (data.strip()) , print (data.get_text())  을 사용 했을 경우 아래와 같이 에러 발생

 

AttributeError                            Traceback (most recent call last)

<ipython-input-44-87a19c7b0277> in <module>

      8 

      9 print (data)

---> 10 print (data.strip())

     11 

     12 data1= soup.find_all("#articleBodyContents > strong.media_end_summary")

 

AttributeError: 'list' object has no attribute 'strip'

 

""" 

 

data1= soup.find_all("#articleBodyContents > strong.media_end_summary")

for a in data1:

    print(a)

        

data2= soup.find("#articleBodyContents > strong.media_end_summary")

print(data2) 

 

"""

find, find_all을 사용 하였으나 아래와 같이 None 이라고 됩니다

이유가 궁금합니다

None

 

"""

답변 2

·

답변을 작성해보세요.

0

kwonokun님의 프로필

kwonokun

질문자

2019.08.07

감사합니다

0

안녕하세요.

우선 첫번째 질문에 답변드리면, print (data[0].text) 하시면 원하시는 텍스트만 출력이 될 듯합니다.

select()를 실행하시면, 결과값이 파이썬 리스트 형태로 나오기 때문에, 각 아이템을 가져오고 싶으시다면, 인덱스 번호를 명시적으로 넣어야 합니다. 혹시 이 부분이 아직 익숙하지 않으시다면, 강의에서 제공해드리고 설명드렸던 파이썬 기초 문제를 꾸준히 풀어보시면 좀더 이해가 빠르실 것 같아요.

 

두번째 질문에 대해서는 결과적으로는  다음에 해당하는 CSS selector가 해당 HTML 파일에 없기 때문인데요.

"#articleBodyContents > strong.media_end_summary"

이 부분은 실제로 코드를 제가 작성해드리고, 심지어 동영상으로라도 찍어서 왜 이 부분이 없는지 설명드리기 까지는 명확히 이해하기 어려우실 수도 있어요. 그런데, 강의에서 예제로 쓰인 링크가 아닌, 각자 크롤링을 원하시는 링크와 관련해서, 어떤 부분이 잘못되었는지를 설명드리려면, 결과적으로는 제가 크롤링을 원하시는 링크에 대해 크롤링 프로그램을 작성해드려야 하거든요.

res = requests.get('https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=101&oid=011&aid=0003599217')

물론 그만큼하기에는 시간이 매우 부족하기도 하구요. 또 한분에 대해 이렇게 해드리면, 결과적으로 수강하신 모든 분들이 각자 원하는 사이트에 대해 크롤링 프로그램을 작성하기를 요청드리는 상황이 발생할 수도 있어서요. 어떤 분은 해드리고, 어떤 분은 안해드릴 수도 없고, 또 심지어 너무 시간이 부족해서, 제가 크롤링 프로그램을 작성에 지연이 발생하면 또다른 불만 아닌 불만이 발생할 수도 있어서요. 그래서 이 부분은 이정도 선에서 설명을 드리는 것에 대해 간곡히 양해를 부탁드립니다.

감사합니다.