我知道KeyErrors与BeautifulSoup相当常见,并且在您向我致敬RTFM之前,我已经在Python文档和BeautifulSoup文档中做了大量的阅读。现在,除了KeyErrors之外,我仍然不知道发生了什么。BeautifulSoup KeyError问题
下面是我试图运行的程序,它不断地持续导致URL列表中的最后一个元素出现KeyError。
我来自C++的背景,只是为了让你知道,但我需要使用BeautifulSoup的工作,这样做在C++将是一个可想而知的噩梦!
这个想法是返回一个网站中所有网址的列表,这些网址在其网页上包含指向某个网址的链接。
这里就是我有这么远:
import urllib
from BeautifulSoup import BeautifulSoup
URLs = []
Locations = []
URLs.append("http://www.tuftsalumni.org")
def print_links (link):
if (link.startswith('/') or link.startswith('http://www.tuftsalumni')):
if (link.startswith('/')):
link = "STARTING_WEBSITE" + link
print (link)
htmlSource = urllib.urlopen(link).read(200000)
soup = BeautifulSoup(htmlSource)
for item in soup.fetch('a'):
if (item['href'].startswith('/') or
"tuftsalumni" in item['href']):
URLs.append(item['href'])
length = len(URLs)
if (item['href'] == "SITE_ON_PAGE"):
if (check_list(link, Locations) == "no"):
Locations.append(link)
def check_list (link, array):
for x in range (0, len(array)):
if (link == array[x]):
return "yes"
return "no"
print_links(URLs[0])
for x in range (0, (len(URLs))):
print_links(URLs[x])
我得到的错误是在旁边的URL的最后一个元素:
File "scraper.py", line 35, in <module>
print_links(URLs[x])
File "scraper.py", line 16, in print_links
if (item['href'].startswith('/') or
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/BeautifulSoup.py", line 613, in __getitem__
return self._getAttrMap()[key]
KeyError: 'href'
现在我知道我需要使用get( )来处理KeyError默认情况。我绝对有不知道如何真正做到这一点,尽管一个小时的搜索。
谢谢,如果我可以澄清这一点,请让我知道。
我想我仍然对发生keyError时发生了什么感到困惑,所以我不知道该如何处理'除了KeyError'段...我真的应该通过它还是会忽略一个可行的网址是什么? – 2012-03-08 00:20:20
非常感谢,它像一个魅力工作!这是否意味着BeautifulSoup像字典一样使用item ['href']?感谢您的帮助,而不仅仅是尖叫“RTFM”! – 2012-03-08 00:31:44
老实说,我不确定问题是什么,我很抱歉。由于其他错误,您的版本无法正常工作,而我尝试的简单版本(仅处理网站主页)就能正常工作。也许你可以从这个简单的例子开始工作吗? – 2012-03-08 00:31:49