2013-01-14 2 views
4

BeautifulSoup에서 작업 중이며 버그 또는 내 오류가 발생했습니다. 내 예제에서는 뉴욕 타임즈의 하위 섹션 사이트 ... 내가 코드를 실행하면BeautifulSoup는 헤드 태그 안의 내용 만 반환합니다.

import urllib2 
from bs4 import BeautifulSoup 
website = "http://www.nytimes.com/pages/politics/index.html" 
data = BeautifulSoup(urllib2.urlopen(website).read()) 
print data 

, 나는 머리를 태그로 돌아와 그 안에 무엇을하고있어 크롤링. 그러나, 그것은 body 태그 내부에있는 것을 잡아 내지 못합니다. 웹 사이트 URL을 http://www.nytimes.com으로 변경하면 BS가 전체 페이지 소스를 반환합니다. 여기에 무슨 일이 일어나고 내가 왜 http://www.nytimes.com/pages/politics/index.html을 크롤링 할 때 바디 태그를 가져 오지 못합니까?

+0

상대로 다음과 같은 버그에서 설명하고있다. 이 코드를 실행하면'head' 태그뿐만 아니라 전체 페이지를 가져옵니다. –

+0

음 ... 질문에있는 코드는 내 파일에있는 그대로 사용합니다. 나는 또한 그것이'html' 태그를 움켜 잡았다 고 말할 것이다. 'body' 태그가 존재하지 않는 것처럼 행동합니다. – jason328

+0

어떤 BeautifulSoup 버전을 사용하고 있습니까? 그리고 위의 코드 (그리고 위의 코드 만) 뒤에'data.body'를 출력하면'None'을 출력합니까? (나를 위해 그것은'body' 태그의 내용을 출력합니다) –

답변

1

이것은 BeautifulSoup의 버그가 아닙니다. 문제는 실제로 bs4가 잘못된 HTML을 매우 관대하지 않는 inbuilt HTMLParser를 사용한다는 사실이며 W3C Markup Validation Service은 HTML이 실제로 잘못된 형식이며 HTMLParser를 유발하고 이후 BeautifulSoup이 파싱을 갑자기 중지시키지 않는 빈틈이없고 엉성한 태그가 거의 없음을 보여줍니다.

이 문제는 재현 할 수 없습니다 BeautifulSoup로

BS4 stops parsing after malformed tag