检查列表中是否存在刮擦元素的Python

时间:2018-09-02 14:53:59

标签: python indexing

当我在python中使用if else语句时,我不断收到错误消息。我希望我的脚本检查索引是否存在,如果存在,则运行代码,如果不存在,则运行另一个代码。我收到错误ValueError: 'Named Administrator' is not in list

import requests
from bs4 import BeautifulSoup
url_3 = 'https://www.brightscope.com/form-5500/basic-info/107299/Orthopedic-Institute-Of-Pennsylvania/15801790/Orthopedic-Institute-Of-Pennsylvania-401k-Profit-Sharing-Plan/'
page = requests.get(url_3)
soup = BeautifulSoup(page.text, 'html.parser')
divs = [e.get_text() for e in soup.findAll('span')]


if divs.index('Named Administrator'):
    index = divs.index('Named Administrator')
    contact = divs[index + 1]
else:
    contact = '-'

1 个答案:

答案 0 :(得分:2)

进行index测试而不是进行__contains__

if 'Named Administrator' in divs:

并且仅在Named Administrator列表中确实存在divs时前进,这样您就不会得到ValueError


另一个要考虑的是,列表中的成员资格测试具有O(N)时间复杂度,因此,如果要对大型列表执行此操作,则可以使用集合:

{e.get_text() for e in soup.findAll('span')}

但是由于集合是无序的,因此您将无法使用index-ing。

因此,请考虑也可以在集合上使用的其他方法,即无需通过索引获取下一个值。

或者您可以使用一组进行成员资格测试,并使用列表获取下一个值。根据您的实际情况,此处的成本可能更高或更低,您只能通过剖析来找出这一点:

divs_list = [e.get_text() for e in soup.findAll('span')]
divs_set = set(divs_list)

if 'Named Administrator' in divs_set:
    index = divs_list.index('Named Administrator')
    contact = divs_list[index + 1]