繁体   English   中英

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

[英]Python when checking if scraped element exists in list

当我在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:

并且仅当divs列表中确实存在Named Administrator时才向前移动,因此不会出现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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM