【发布时间】:2012-12-15 06:05:14
【问题描述】:
我有一些 html 代码,其中包含许多 <table>s。
我正在尝试获取第二个表中的信息。有没有办法在不使用soup.findAll('table') 的情况下做到这一点?
当我使用soup.findAll('table') 时,我得到一个错误:
ValueError: too many values to unpack
有没有办法在某些代码中获取第 n 个标签,或者不需要遍历所有表的其他方式?或者我应该看看我是否可以在表格中添加标题? (如<table title="things">)
如果有帮助的话,每个表格上方还有标题 (<h4>title</h4>)。
谢谢。
编辑
当我问这个问题时,我的想法是这样的:
我正在将对象解压缩成两个值,当时还有更多值。我认为这只会给我列表中的前两件事,但当然,它一直给我上面提到的错误。我不知道返回值是一个列表,并认为它是一个特殊对象或其他东西,我的代码基于我朋友的。
我在想这个错误意味着页面上有太多的表格并且它无法处理所有的表格,所以我在寻求一种方法来不使用我正在使用的方法来完成它。我可能应该停止假设。
现在我知道它返回一个列表,我可以在 for 循环中使用它或使用 soup.findAll('table')[someNumber] 从中获取一个值。我也了解了解包是什么以及如何使用它。感谢所有帮助过的人。
希望这能把事情弄清楚,既然我知道我在做什么,我的问题就没有我问它时的意义了,所以我想我只是在这里写下我的想法。
编辑 2:
这个问题现在已经很老了,但我仍然看到我从来没有真正清楚自己在做什么。
如果它对任何人有帮助,我会尝试解压缩 findAll(...) 结果,其中的数量我不知道。
useless_table, table_i_want, another_useless_table = soup.findAll("table");
由于页面中的表格数量并不总是我猜到的,而且元组中的所有值都需要解包,所以我收到了ValueError:
ValueError: too many values to unpack
所以,我一直在寻找方法来获取返回的元组中的第二个(或任何一个索引)表,而不会遇到关于使用了多少表的错误。
【问题讨论】:
-
只是做
soup.findAll('table')不会不导致ValueError。请发布您的完整代码。too many values to unpack表示左侧表达式中有多个变量。 -
soup.find(title="things")?? -
在帖子的顶部,我说我在代码中使用了它,其中包含许多
<table>s。我在这个页面上使用它:view-source:dhmc.us/players/view/nasonfish 并且正在使用这个代码:table1, table2 = soup.find_all('table') -
soup.find_all('table')返回一个列表。tables = soup.find_all('table')应该可以工作 -
@nasonfish:错误显示您有超过 2 个表,因此解包失败。在这种情况下不要使用元组解包。
标签: python beautifulsoup