如何解决ValueError不在List问题中?我不明白我的代码有什么问题。
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://uk.reuters.com/business/quotes/financialHighlights? symbol=AAPL.O")
bsObj = BeautifulSoup(html,"html.parser")
tag = bsObj.findAll("td")
tagList = []
for tagItem in tag:
tagList.append(tagItem)
print(tagList.index("<td>Dec</td>"))
错误:
Traceback (most recent call last):
File "/Users/home/Desktop/development/x/code.py", line 11, in <module>
print(tagList.index("<td>Dec</td>"))
ValueError: '<td>Dec</td>' is not in list
Process finished with exit code 1
答案 0 :(得分:2)
您正在创建<class 'bs4.element.Tag'>
个对象的列表。它们的字符串表示似乎与您正在查找的字符串匹配,除了对象不相同,因为它们具有不同的类型。
(请注意,打印列表会产生[<td>Dec</td>, <td>Dec</td>]
,请注意没有引号,打印相同的列表但字符串会产生['<td>Dec</td>', '<td>Dec</td>']
)
Quickfix:将您的列表创建为字符串
for tagItem in tag:
tagList.append(str(tagItem))
或作为列表理解:
tagList = [str(tagItem) for tagItem in tag]
现在index
有效:返回&#34; 0&#34;
请注意,您可以保持列表未转换(如果要保留对象,而不是强制转换为字符串),并使用以下内容查找与字符串相比的第一个索引:
print(next(i for i,x in enumerate(tagList) if str(x)=="<td>Dec</td>"))