Какой самый эффективный способ запустить несколько тестов в одном цикле? питон

Цель: посетить список страниц блога. На каждой странице блога и найдите социальные ссылки (Instagram, Facebook, Twitter) для этой страницы блога.

Предположение: первое вхождение каждой социальной ссылки будет правильным. Более поздние события на странице чаще всего относятся к чужой учетной записи.

Желаемый социальный формат URL - www.имя_социальной сети.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 - перебрать все ссылки и проверить первый матч ОДНОЙ социальной сети. Переберите все ссылки и проверьте первый матч в следующей социальной сети. (Ненавижу это)

Вариант № 2 - Создать переменные для каждого социального URL. Создать какой-то маркер для совпадения и только обновить переменную совпадения не задано. (Лучше, но я все еще буду продолжать повторяться после того, как я заполнил все переменные)

Вариант № 3 - Любые предложения или советы приветствуются. Как бы вы подошли к этому?

1 ответ

Решение

Предложение:

Сохраните трекер и обновите любой обработанный 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

Я надеюсь, что это окажется полезным.

Другие вопросы по тегам