2016-12-17 2 views
0

이 없습니다 나는 문제는 내가 아래 오류가 유지되지 수있다 onlineAttributeError는 'NoneType'개체가 어떤 속성 '스트립'나는 파이썬 (현재 beautifulsoup4 요청하고) 배우려고 노력했습니다

튜토리얼을 발견 그것을 전부 알아 내십시오 ...

어떤 도움을 주실 수 있나요?

역 추적 (마지막으로 가장 최근 통화) : 파일 : 제목에 "C \ 사용자 \ BILLYBOB \ 바탕 화면 \ 웹 Scrap.py", 라인 14 = a.string.strip() AttributeError : 'NoneType' 객체에 'strip'속성이 없습니다.

여기는 실수 한 경우의 코드입니다. BS4 documentation에서

import requests 
from bs4 import BeautifulSoup 

result = requests.get("http://www.oreilly.com/") 

c = result.content 

soup = BeautifulSoup(c, "html.parser") 
samples = soup.find_all("a") 
samples[0] 

data = {} 
for a in samples: 
    title = a.string.strip() 
    data[title] = a.attrs['href'] 
+2

'a'의'string' 속성은'None'입니다. BeautifulSoup에 대한 문서를 살펴보고'.find_all()'이 반환하는 것을 볼 필요가있다. –

답변

1

samples의 첫 번째 멤버는 문자열 속성을 가지고 있지 않으며,로 결과, a.string 아무것도 반환하지 않으므로 존재하지 않는 무언가에 strip() 메서드를 호출하고 있습니다.

하지만 다른 문제가 있습니다. ahref 속성이있는 것은 아닙니다. 대신, 둘 다 명시 적으로 점검해야합니다. 그렇지 않으면 오류가 발생합니다 (Yevhen의 대답에 문제가 있습니다. 그렇지 않은 경우 올바르지 않습니다).

for a in samples: 
    if not a.string is None: 
     title = a.string.strip() 
     if 'href' in a.attrs.keys(): 
      data[title] = a.attrs['href'] 

이 방법, 당신은 관련된 메서드를 호출하기 전에 각 매개 변수에 대해 명시 적으로 확인 : 문제에

하나의 잠재적 인 수정 작성하는 것입니다.

+1

좋은 캐치. 주요 문제는 OP가 모든 링크 내에서 제목을 검색한다는 것입니다 ('.find_all ("a")'). –

+0

나는 그것에 동의 할 것이다. 더 선별적인 검색을 사용하면 OP 코드가 문제를 해결하는 데 도움이 될 것이라고 생각합니다. – finbarr

4

:

난 당신이 당신이 원하는 것을 얻을 .text을 사용할 수 있다고 생각

If a tag contains more than one thing, then it’s not clear what .string should refer to, so .string is defined to be None

:

title = a.text.strip() 
관련 문제