在单个循环中 运行 进行多项测试的最有效方法是什么? Python

What is the most efficient way to run multiple tests in a single loop? Python

目标:访问博客页面列表。在每个博客页面上找到该博客页面的社交 links(Instagram、Facebook、Twitter)。

假设:每个社交 link 的第一次出现都是正确的。出现在页面后面的更可能是指其他人的帐户。

理想的社交 URL 格式是 www.social_network_name.com/username

有些URL的格式是不可取的(例如instagram.com/abc/)

def check_instagram(url):
   if 'instagram.com/' in url and "instagram.com/abc/" not in url::
      return True

def check_facebook(url):
   if 'facebook.com/' in url and "facebook.com/abc/" not in url::
      return True

#my list of pages t be parsed
pages_to_check = ['www.url1.com', 'www.url2.com', ... 'www.urn_n.com']

#iterate through my list of pages t be parsed
for page in pages_to_check :

   #get all the links on the page
   page_links = *<selenium code to get all links on page>*

我试过了...

  For link in page_links:

     #when first Instagram handle found
     if check_instagram(url):
        *code to write to a dataframe here*            
        break

     #when first Instagram handle found
     if check_facebook(url):
        *code to write to a dataframe here*
        break

问题:我一匹配到一个社交URL,它就跳出循环,不再继续寻找其他网络句柄。

有些选项我觉得不是很好。我是菜鸟。我真的很感激这里的一些建议。

选项 #1 - 遍历所有 link 并测试一个社交网络的第一场比赛。遍历所有 link 并测试 NEXT 社交网络的第一场比赛。 (讨厌这个)

选项 #2 - 为每个社交创建变量 URL。为匹配创建一些标记,只更新未设置匹配的变量。 (更好,但我仍然会在填充所有变量后继续迭代)

选项 #3 - 欢迎提出任何建议或意见。你会如何处理这个问题?

建议:

保留跟踪器并更新任何已处理的社交媒体 URL。一旦它们都被处理完,然后跳出循环。

代码:

tracker = dict.fromkeys(['facebook', 'instagram'], False)

for link in page_links:
    # if all the values of the tracker are true, then break out of the loop
    if all(v for v in tracker.values()):
        break
    # when first Instagram handle found
    if check_instagram(url):
        *code to write to a dataframe here*
        tracker['instagram'] = True
     # when first Facebook handle found
     if check_facebook(url):
        *code to write to a dataframe here*
        tracker['facebook'] = True

希望这有用。