检查列表中是否存在抓取元素时的 Python



当我在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 = '-'

与其做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]

最新更新