您正在体验 BeautifulSoup 在后台使用的 differences between parsers。
由于你没有明确指定,BeautifulSoupchooses one automatically:
BeautifulSoup 构造函数的第一个参数是一个字符串或一个
打开文件句柄——你要解析的标记。第二个论点是如何
你想解析标记。
如果您不指定任何内容,您将获得最好的 HTML 解析器
安装。 Beautiful Soup 将 lxml 的解析器评为最佳,然后
html5lib 的,然后是 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()
打印:
Coffee People Donut Shop K-Cup Coffee 是一款中度烘焙咖啡
让人想起你在经典甜甜圈柜台找到的一杯乔
遍布美国。甜而丰富的甜品风味
每一杯,这款经典咖啡即使是那些
害怕咖啡苦味的人。甜咸口味套装咖啡人甜甜圈
除了普通的混合咖啡外,还可以购买咖啡,现在您可以
享受这种独特的咖啡,享受单杯 K-Cup 带来的便利
笔芯。包括 24 个 K 杯。