BeautifulSoup
에 의해 사용중인 differences between parsers이 발생합니다.
당신이 명시 적으로 지정하지 않은 때문에
, BeautifulSoup
chooses one automatically :
BeautifulSoup로 생성자에 첫 번째 인수는 문자열 또는 구문 분석하려는 열린 핸들 - 마크 업이다. 두 번째 인수는 마크 업을 구문 분석하려는 방법입니다 ( ).
아무 것도 지정하지 않으면 최상의 HTML 파서 인 이 설치됩니다. Beautiful Soup은 lxml의 파서를 최상으로 평가 한 다음 html5lib 's, Python에 내장 된 파서입니다.
여기 무슨 일이 일어나고 있는지의 데모입니다 :
>>> import urllib2
>>> from bs4 import BeautifulSoup
>>> url = 'http://www.amazon.com/dp/B00IOXUJRY'
>>> page = BeautifulSoup(urllib2.urlopen(url), 'html.parser')
>>> print page.find(id='productTitle')
None
>>> page = BeautifulSoup(urllib2.urlopen(url), 'html5lib')
>>> print page.find(id='productTitle')
<span class="a-size-large" id="productTitle">Keurig, The Original Donut Shop, K-Cup packs (Regular - Medium Roast Extra Bold, 24 Count)</span>
>>> page = BeautifulSoup(urllib2.urlopen(url), 'lxml')
>>> print page.find(id='productTitle')
<span class="a-size-large" id="productTitle">Keurig, The Original Donut Shop, K-Cup packs (Regular - Medium Roast Extra Bold, 24 Count)</span>
즉,이 솔루션은 명시 적으로 html5lib
, 또는 lxml
중 하나를 파서를 지정하는 것입니다 -하지만 당신은 설치이 모듈이 있는지 확인하십시오.
제품 설명을 얻으려면 selenium+PhantomJS
접근 방법을 사용할 필요가 없습니다. 당신은 BeautifulSoup
를 사용하여 얻을 수 있습니다 :
print page.find('div', class_='productDescriptionWrapper').text.strip()
인쇄 :
커피 인민 도넛 숍 K-컵 커피 클래식 도넛 카운터 을에서 찾을 조의 잔을 연상시키는 중간 볶은 커피 입니다 미국 전역에 걸쳐 달콤하고 풍부한 디저트 맛으로 매 컵마다 커피를 두려워하는 사람 에게도 친숙합니다. 달콤한 풍미 세트 풍미 커피 피플 세트 도넛 평소 커피와의 차별화 된 가게 커피 리플렉션 K - 컵 싱글 서비스 로이 독특한 커피를 즐길 수 있습니다. 24 개의 K-Cup이 포함되어 있습니다.
Whoaa! 정말 멋지다. 이 파서를 어느 페이지에서 사용해야하는지 어떻게 알 수 있습니까? 내 말은, 지금처럼 나는 미래에 나는 다른 파서를 시도 할 같은 오류가 발생합니다. 히트 & 재판인가, 또는 페이지를 보아 식별 할 수 있습니까? 또는 일반적으로 어떤 파서를 선호합니까? – xyz
@xyz 잘, 파서는 다른 조건에서 다르다. 하나는 다른 것보다 관대하고 다른 하나는 더 빠르다. - 이것은 기본적으로 파싱하는 웹 페이지와 필요한 데이터, 얼마나 빨리 필요로 하는가에 달려있다. 개인적으로 나는 언제나'lxml'을 사용할 수 있습니다. 희망이 도움이됩니다. – alecxe