2012-11-10 5 views
2

나는 다음 페이지를 크롤링 : page_html가에서 콘텐츠입니다 BeautifulSoup로 (page_html을) :BeautifulSoup로 4 : 분할 오류가 (코어 덤프)

http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html

을하지만 분할 오류 (코어 덤프) 가지고 호출 할 때 요청 라이브러리. 이것이 BeautifulSoup의 버그입니까? 이 문제를 해결할 방법이 있습니까? try ... except와 같은 접근조차도 코드를 실행하는 데 도움이 될 것입니다. 미리 감사드립니다.

코드는 다음과 같습니다 : 확실히

import requests 
from bs4 import BeautifulSoup 

toy_url = 'http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html' 
res = requests.get(toy_url,headers={"USER-Agent":"Firefox/12.0"}) 
page = res.content 
soup = BeautifulSoup(page) 
+0

코드를 재현 할 수 있도록 표시하십시오 (urllib2 및 BeautifulSoup로는 이것을 재현 할 수 없습니다). –

+0

@DavidRobinson 코드가 추가되었습니다. 질문 주셔서 감사합니다. – Taosof

+0

'lxml'을 설치하십시오. py2.7의 기본 HTML 파서는 잘못된 태그 때문에이 페이지를 구문 분석하지 않습니다 ... BTW, py3.2는 정상적으로 작동합니다. (segfault로 만들 수 없습니다) – JBernardo

답변

3

이 문제는 a bug in lxml에 의해 발생하며 lxml 2.3.5로 고정되어 있습니다. lxml을 업그레이드하거나 html5lib 또는 HTMLParser 파서와 함께 Beautiful Soup을 사용할 수 있습니다.

+0

lxml을 3.4.1-py27_0에서 3.4.3-py27_0으로 업그레이드하면서 "Segmentation Fault : 11"오류가 발생하여 문제가 해결되었습니다. – Andrew

1

버그. 이 방법으로 segfault 할 수 없어야합니다. 내가 (4.0.1)을 재현 할 수 있습니다 :

>>> import bs4, urllib2 
>>> url = "http://www.nasa.gov/topics/earth/features/plains-tornadoes-20120417.html" 
>>> page = urllib2.urlopen(url).read() 
>>> soup = bs4.BeautifulSoup(page) 
Segmentation fault 

을 몇 등분 한 후,이 DOCTYPE에 의한 것으로 보이는 :

>>> page[:page.find(">")+1] 
'<!DOCTYPE "xmlns:xsl=\'http://www.w3.org/1999/XSL/Transform\'">' 

그리고 원유 해킹 BS4 그것을 구문 분석 할 수 있습니다 :

>>> soup = bs4.BeautifulSoup(page[page.find(">")+1:]) 
>>> soup.find_all("a")[:3] 
[<a href="/home/How_to_enable_Javascript.html" target="_blank">› Learn How</a>, <a href="#maincontent">Follow this link to skip to the main content</a>, <a class="nasa_logo" href="/home/index.html"><span class="hide">NASA - National Aeronautics and Space Administration</span></a>] 

더 많은 것을 알고있는 사람은 실제로 진행되고있는 것을 볼 수 있지만 어쨌든 시작하는 데 도움이 될 수 있습니다.

+0

파서 bs4가 사용하는 'HTMLParseError : 나쁜 끝 태그 : u "", 줄 138, 열 93'에 따라 다릅니다. 'lxml'과 Python3.2 기본 html 파서가 잘 작동합니다. – JBernardo

+0

DSM에 감사드립니다. 하지만 좀 더 일반적인 해결책이 필요합니다. 내 크롤러는 nasa.gov 웹 사이트를 타겟팅하는 것이 아닙니다. – Taosof

+0

Wikipedia MW API에서 HTML을 구문 분석하는 동안 동일한 문제가 발생했습니다. 이것은 잘되고, 빠르고, 더럽습니다. 감사. – Nilesh