【发布时间】:2016-03-03 08:55:23
【问题描述】:
作为练习作业,我正在尝试使用 BeautifulSoup 库从亚马逊解析 this search results page。
这是我的代码。
from urllib import urlopen
from bs4 import BeautifulSoup
SourceURL = "http://www.amazon.in/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords=android"
ResultsPage = urlopen(SourceURL )
Soup = BeautifulSoup(ResultsPage)
print "<SearchResults>"
for SearchResult in Soup.findAll('li', attrs={'class': 's-result-item celwidget'}):
#Read Result Title
Title = SearchResult.find("h2", {"class": "a-size-medium a-color-null s-inline s-access-title a-text-normal"})
ResultTag = "\t<Result><![CDATA["
if Title is not None:
ResultTag += Title.text
ResultTag += "]]></Result>"
print ResultTag
print "</SearchResults>"
显示的输出如下
<SearchResults>
<Result><![CDATA[Micromax Bolt S301 (Black, No charger, No earphone inbox)]]></Result>
<Result><![CDATA[Android Application Development (with Kitkat Support), Black Book]]></Result>
<Result><![CDATA[ZTE Blade Buzz White V815W]]></Result>
<Result><![CDATA[Android: App Development & Programming Guide: Learn In A Day! (Android, Rails, Ruby Programming, App Development...]]></Result>
<Result><![CDATA[]]></Result>
<Result><![CDATA[Karbonn Titanium S21 (Grey)]]></Result>
<Result><![CDATA[Head First Android Development]]></Result>
<Result><![CDATA[Micromax Canvas A1 Android One (White, 8GB)]]></Result>
<Result><![CDATA[Professional Android 4 Application Development (Wrox)]]></Result>
<Result><![CDATA[OnePlus X (Onyx) - Invite Only]]></Result>
<Result><![CDATA[Lenovo Vibe S1 (4G, White)]]></Result>
<Result><![CDATA[Micromax Bolt D320 (Black, 4GB)]]></Result>
<Result><![CDATA[2 in 1 Capacitive Stylus Pen With Black Ball Pen for Android Touch Sceen Mobile Phones and Tablets All iPads and...]]></Result>
<Result><![CDATA[Moto E 2nd Generation XT1506 (3G, Black)]]></Result>
<Result><![CDATA[Android: App Development & Programming Guide: Learn In A Day!]]></Result>
<Result><![CDATA[Lenovo Vibe S1 (4G, Dark Blue)]]></Result>
</SearchResults>
如果您注意到,由于某种原因,输出中缺少第五个结果,而它使用相同的代码打印所有其他行。本质上,SearchResult.find() 方法只为一条记录返回 NULL 值。
如果我遗漏了什么,请告诉我吗?
谢谢, 尼基尔
【问题讨论】:
-
我刚刚在该页面上运行了
l=document.querySelectorAll('li.s-result-item.celwidget'); for ( var i = 0; i < l.length; i++ ) {console.log(l.item(i)); k=l[i].querySelectorAll('h2.a-size-medium.a-color-null.s-inline.s-access-title.a-text-normal'); for ( var j = 0; j < k.length; j++ ) console.log(" ", k[j].innerHTML); },它确实正确列出了所有内容,因此至少 HTML 标记没有什么奇怪的地方。也许您可以在 if 中添加一个else,将 li 的 the path 添加到结果中?
标签: python beautifulsoup html-parsing missing-data