如何解决ValueError不在List中?它在列表中

时间:2017-02-02 13:44:09

标签: python-3.x beautifulsoup

如何解决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

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>"))