Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用函数时返回keyerror_Python_Beautifulsoup - Fatal编程技术网

Python 调用函数时返回keyerror

Python 调用函数时返回keyerror,python,beautifulsoup,Python,Beautifulsoup,我在测试这个美丽的乌苏爬虫时遇到了问题。如果有明显的错误,请原谅,因为这是我学习Python的第三个小时。我有下面的代码 def huffpost_crawl(): article_list = [] DOMAIN = 'huffingtonpost.com' huff_soup = BeautifulSoup(urllib2.urlopen("http://www.huffingtonpost.com").read()) news_list = huff_soup.find_all("

我在测试这个美丽的乌苏爬虫时遇到了问题。如果有明显的错误,请原谅,因为这是我学习Python的第三个小时。我有下面的代码

def huffpost_crawl():
 article_list = []
 DOMAIN = 'huffingtonpost.com'
 huff_soup = BeautifulSoup(urllib2.urlopen("http://www.huffingtonpost.com").read())
 news_list = huff_soup.find_all("div", {"class", "snp_most_popular_entry"})[0]
 for news in news_list[0]:
    title = news('div', {'class', 'snp_most_popular_entry_desc'})[0].a.get_text()
    full_url = news('div', {'class', 'snp_most_popular_entry_image'}).a["href"]
    blurb = ""
    thumb_url = news('div', {'class', 
   'snp_most_popular_entry_image'}).a.img["longdesc"]


 print title

huffpost_crawl()
当我在终端中运行
pythong test.py
时,返回的是

Traceback (most recent call last):
  File "test.py", line 21, in <module>
  huffpost_crawl()
File "test.py", line 11, in huffpost_crawl
  for news in news_list[0]:
File "/usr/local/lib/python2.7/site-packages/bs4/element.py", line 879, in __getitem__
  return self.attrs[key]
KeyError: 0
回溯(最近一次呼叫最后一次):
文件“test.py”,第21行,在
哈夫波斯特(huffpost_crawl)
文件“test.py”,第11行,在huffpost_中
对于新闻列表[0]中的新闻:
文件“/usr/local/lib/python2.7/site packages/bs4/element.py”,第879行,在__
返回self.attrs[键]
关键错误:0

它看起来像是一个字典(键值对),没有
0的键。如果它是一个你试图索引的列表的话,那就行了。因此,你的

用于新闻列表中的新闻[0]:

排队,试试看

对于键,新闻列表中的新闻。iteritems():

这将遍历字典中的每个项。如果你只想得到第一个结果,我不知道你会怎么决定。请尝试打印项目以确定返回的内容。

问题在于:

news_list = huff_soup.find_all("div", {"class", "snp_most_popular_entry"})[0]
for news in news_list[0]:
只需删除这两个
[0]
位中的一个,问题(或者至少是这个问题——我不能保证代码的其余部分能满足您的需要)就会消失

我不会解释为什么代码是错误的,因为你真的需要学会调试你的代码并自己解决这个问题

首先在交互式解释器中执行此操作:

>>> huff_soup = BeautifulSoup(urllib2.urlopen("http://www.huffingtonpost.com").read())
>>> news_list = huff_soup.find_all("div", {"class", "snp_most_popular_entry"})
查看返回的是什么形状,以及如何以交互方式到达所需的零件?一旦您知道了这一点,就应该清楚地知道如何在脚本中实现这一点


即使在事情过于复杂而无法交互处理的情况下,您也可以使用打印语句记录内容,在调试器中运行等等。不要只是盲目地盯着不起作用的代码说“为什么它不起作用?”,或者将代码发布到某个地方并询问其他人它为什么不起作用,或者你永远也学不到任何东西。

我被返回
TypeError:NoneType对象不可调用
它们也许你的
find\u all
没有找到任何东西?尝试打印
news\u列表
。现在返回的是
TypeError:“NoneType”对象不可再次调用
在哪一行?我不想进入一个大的主题外调试讨论,所以看看错误是哪一行抛出的,然后从那里往回走。我怀疑你的查找线找不到任何东西。事实证明,这是错误的。但这显然只是一个猜测,而且还不错。这是我开始使用python的第三个小时。@jason328:我认为你是在倒退,从长远来看这会伤害你。尝试以交互方式玩东西,然后思考如何将它们转换为健壮的脚本;不要试图先编写健壮的脚本,然后再学习调试。在过去,人们必须用手穿孔卡片提交程序,然后等3个小时看是否有效,但我们不必再这样做了。我同意。我只是处于一种没有时间玩东西的情况。三小时前,我的电脑里甚至没有安装python。