Repository: datactive/bigbang (language: python)

Issue:
Integrate listserv 16.5 ingress into standard collect_mail.py



Discussion / hints:

Fix patch:
diff --git a/bigbang/listserv.py b/bigbang/listserv.py
index ae9a0170..3b8ff252 100644
--- a/bigbang/listserv.py
+++ b/bigbang/listserv.py
@@ -8,7 +8,8 @@
 import re
 import subprocess
 import time
-import urllib
+from urllib.parse import urlparse
+from urllib.parse import urljoin
 import warnings
 from email.header import Header
 from email.message import Message
@@ -133,7 +134,6 @@ def from_url(
         """
         Args:
         """
-        # TODO implement field selection, e.g. return only header, body, etc.
         if session is None:
             session = get_auth_session(url_login, **login)
         soup = get_website_content(url, session=session)
@@ -280,7 +280,7 @@ def get_body_from_html(
                 if "Fplain" in tag.get("href")
             ][0]
             body_soup = get_website_content(
-                urllib.parse.urljoin(url_root, href_plain_text)
+                urljoin(url_root, href_plain_text)
             )
             return body_soup.find("pre").text
         except Exception:
@@ -658,11 +658,8 @@ def get_period_urls(
         All messages within a certain period
         (e.g. January 2021, Week 5).
         """
-        url_root = ("/").join(url.split("/")[:-2])
         # create dictionary with key indicating period and values the url
-        periods, urls_of_periods = cls.get_all_periods_and_their_urls(
-            url_root, get_website_content(url)
-        )
+        periods, urls_of_periods = cls.get_all_periods_and_their_urls(url)
 
         if any(
             period in list(select.keys())
@@ -691,13 +688,12 @@ def get_period_urls(
         return urls_of_periods
 
     @staticmethod
-    def get_all_periods_and_their_urls(
-        url_root: str,
-        soup: BeautifulSoup,
-    ) -> Tuple[List[str], List[str]]:
+    def get_all_periods_and_their_urls(url: str) -> Tuple[List[str], List[str]]:
+        url_root = ("/").join(url.split("/")[:-2])
+        soup = get_website_content(url)
         periods = [list_tag.find("a").text for list_tag in soup.find_all("li")]
         urls_of_periods = [
-            urllib.parse.urljoin(url_root, list_tag.find("a").get("href"))
+            urljoin(url_root, list_tag.find("a").get("href"))
             for list_tag in soup.find_all("li")
         ]
         return periods, urls_of_periods
@@ -755,7 +751,7 @@ def get_messages_urls(cls, name: str, url: str) -> List[str]:
         a_tags = soup.select(f'a[href*="A2="][href*="{name}"]')
         if a_tags:
             a_tags = [
-                urllib.parse.urljoin(url_root, url.get("href"))
+                urljoin(url_root, url.get("href"))
                 for url in a_tags
             ]
         return a_tags
@@ -1050,17 +1046,22 @@ def get_lists_from_url(
         ):
             soup = get_website_content(url)
             a_tags_in_section = soup.select(
-                'a[href*="A0="][onmouseover*="showDesc"][onmouseout*="hideDesc"]',
+                f'a[href^="{urlparse(url).path}?A0="]',
             )
 
             mlist_urls = [
-                urllib.parse.urljoin(url_root, a_tag.get("href"))
+                urljoin(url_root, a_tag.get("href"))
                 for a_tag in a_tags_in_section
             ]
+            mlist_urls = list(set(mlist_urls))  # remove duplicates
 
             if only_mlist_urls:
                 # collect mailing-list urls
-                [archive.append(mlist_url) for mlist_url in mlist_urls]
+                [
+                    archive.append(mlist_url)
+                    for mlist_url in mlist_urls
+                    if len(ListservList.get_all_periods_and_their_urls(mlist_url)[1]) > 0
+                ]
 
             else:
                 # collect mailing-list contents
@@ -1097,12 +1098,12 @@ def get_sections(url_root: str, url_home: str) -> int:
         archive_sections_dict = {}
         if sections:
             for sec in sections:
-                key = urllib.parse.urljoin(url_root, sec.get("href"))
+                key = urljoin(url_root, sec.get("href"))
                 value = sec.text
                 if value in ["Next", "Previous"]:
                     continue
                 archive_sections_dict[key] = value
-            # TODO check that p=1 is included
+            archive_sections_dict[re.sub(r'p=[0-9]+', 'p=1', key)] = 'FIRST'
         else:
             archive_sections_dict[url_home] = "Home"
         return archive_sections_dict
diff --git a/examples/url_collections/listserv.3GPP.txt b/examples/url_collections/listserv.3GPP.txt
index 11d2952c..a3c997fe 100644
--- a/examples/url_collections/listserv.3GPP.txt
+++ b/examples/url_collections/listserv.3GPP.txt
@@ -1,360 +1,289 @@
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG4_E_MEETING
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG5
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG6
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG6_API_TEST
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_FUTURERAN
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_TDOC
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG1
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG2
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG3
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG3_ELECTRONIC
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG3_EMAIL_AGREEME
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_EDGE
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_GPRS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_CA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2_ROHC
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_PCS1900
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_TTCN
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG5
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_LEADERS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_ADHOC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_BANDS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_FUTURERAN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_AAS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_CELL_RESELECTION
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_DRAFTS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_DIVERSITY_OFF
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_AHG1
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_DRAFTS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_LTE_ADVANCED
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_EUL_AH
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2_MBMS_RRC
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2_ROHC
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2_UMTS_DRAFTS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_NR
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_LTE
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2_MBMS_RRC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG4_E_MEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_IOT
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_AAS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_BANDS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_CA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_CPC
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_DIVERSITY_OFF
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_DRAFTS
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_EDCH
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN3-SA5-RET
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_TDOC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_WCDMA_MIMO
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG2
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_ADHOC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_DRAFTS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG5
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_HSPA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG5
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_CHANNELMODEL
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_LTE_ADVANCED
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_GPRS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG1_EUL_AH
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG6
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_HSDPA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_IOT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_TTCN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG6_API_TEST
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_GERAN_WG4_EDGE
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_EMEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_CPC
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_LTE
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_MIMO-OTA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_TEM
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_MTSI
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_ANALYTICS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_POWERCONTROL
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_MBS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_GLOBALTEXT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_IOT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_FR2_MU
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG6
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_WLAN
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_NR-MIMO-OTA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_NR_BANDS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA1_EMEET
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_TRP-TRS-OTA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_UE_ANTENNA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_5G_NR
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_ANALYTICS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_MBMS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_DRAFTS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_DISCUSSIONS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_ITUT_AHG
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_MIMO-OTA
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_APPLICABILITY
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_EMEET
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_ELCS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_PROSE_GCSE_LTE
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_SIG
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_EMEET_RF
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_EMEET_SIG
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_FR2_MU
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_IMSCC
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_IOT
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_LTE-CDMA2000
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_RF
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_SIG
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_LTE-CDMA2000
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_UE_ANTENNA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_5G_NR
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WGS_LONG_TERM_EVOLUTION
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_DRAFTS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_AIPN
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_GLOBALTEXT
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_VOCABULARY
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_WLAN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_VCC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG3_LI
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WGS_LTE_UE_TRANSCEIVER
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_DISCUSSIONS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_ELCS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_MTCE
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_PROSE_GCSE_LTE
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_UE_TXPOW
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_EMEET
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_IMSCC
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_UPCON
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_VCC
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_EVS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_EVS-IVAS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_MBS
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_MTSI
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_SQ
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_VIDEO
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG5_EMEET_SIG
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG2_MTCE
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_RAN_WG4_NR_BANDS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG1_VOCABULARY
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5
+https://list.etsi.org/scripts/wa.exe?A0=AIOTIWG8
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG3_API
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG1_RF
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG1_SIG
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_SWGC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_CHARGING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG2
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_WORKSHOP_LTE_GSM_HANDOVERS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_OAM
+https://list.etsi.org/scripts/wa.exe?A0=AT-N
+https://list.etsi.org/scripts/wa.exe?A0=ADMIN_GROUP
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_SWGB
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG3_USAT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG2_SWG3
+https://list.etsi.org/scripts/wa.exe?A0=AIOTIWG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_WP_GROUP
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG3_UI
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_SWGA
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG3_TEST
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_VIDEO
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG5_SWGD
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG6
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG2_SWG1
 https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG2_SWG2
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_UE_POSITIONING
-https://list.etsi.org/scripts/wa.exe?A0=3GPP_WORKSHOP_LTE_GSM_HANDOVERS
-https://list.etsi.org/scripts/wa.exe?A0=462_ITS_VALID_CONF_FRMWK
-https://list.etsi.org/scripts/wa.exe?A0=AERO
-https://list.etsi.org/scripts/wa.exe?A0=AERO-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=AERO_A_SMGCS
-https://list.etsi.org/scripts/wa.exe?A0=AERO_DLS
-https://list.etsi.org/scripts/wa.exe?A0=AFI_ISG
-https://list.etsi.org/scripts/wa.exe?A0=AMETIS
-https://list.etsi.org/scripts/wa.exe?A0=ANSI_EU
-https://list.etsi.org/scripts/wa.exe?A0=ANTILOPE_ALL
-https://list.etsi.org/scripts/wa.exe?A0=ANTILOPE_COMMISSION
-https://list.etsi.org/scripts/wa.exe?A0=ANTILOPE_CORE
-https://list.etsi.org/scripts/wa.exe?A0=ANTILOPE_SEP
-https://list.etsi.org/scripts/wa.exe?A0=ANTILOPE_SVP
-https://list.etsi.org/scripts/wa.exe?A0=AT1
-https://list.etsi.org/scripts/wa.exe?A0=AT2
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG2_SWG1
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_SA_WG4_SQ
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_T_WG1
 https://list.etsi.org/scripts/wa.exe?A0=ATMOBILE
-https://list.etsi.org/scripts/wa.exe?A0=ATTM_AH_EETNT
-https://list.etsi.org/scripts/wa.exe?A0=B2B_WORKSHOP
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_CYSECNIS
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_ESSREV
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_M2M_PP
 https://list.etsi.org/scripts/wa.exe?A0=BOARD_REGPOLES
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_RISE
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_SAP
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_SMRTCITY
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_SOOS
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_SSP
-https://list.etsi.org/scripts/wa.exe?A0=BOARD_TREND
-https://list.etsi.org/scripts/wa.exe?A0=BRAN_HM
-https://list.etsi.org/scripts/wa.exe?A0=BRAN_RCWG
 https://list.etsi.org/scripts/wa.exe?A0=BROADCAST_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=BROADCAST_M331
+https://list.etsi.org/scripts/wa.exe?A0=BOARD_SOOS
+https://list.etsi.org/scripts/wa.exe?A0=BOARD_RISE
 https://list.etsi.org/scripts/wa.exe?A0=CENELEC_ETSI_DIGITAL_DIVIDEND
 https://list.etsi.org/scripts/wa.exe?A0=CENELEC_ETSI_JWG_EMC
+https://list.etsi.org/scripts/wa.exe?A0=BROADCAST
 https://list.etsi.org/scripts/wa.exe?A0=CEPT_ETSI
+https://list.etsi.org/scripts/wa.exe?A0=BROADCAST_M331
 https://list.etsi.org/scripts/wa.exe?A0=CLC-ETSI-JWG-PLTCOEX
-https://list.etsi.org/scripts/wa.exe?A0=CLOUD
-https://list.etsi.org/scripts/wa.exe?A0=CLOUD_STANDARDS_COORDINATION
-https://list.etsi.org/scripts/wa.exe?A0=CLUBDEGOURMANDS
-https://list.etsi.org/scripts/wa.exe?A0=CSC_DATAPORT
-https://list.etsi.org/scripts/wa.exe?A0=CSC_INTEROP
+https://list.etsi.org/scripts/wa.exe?A0=BOARD_TREND
 https://list.etsi.org/scripts/wa.exe?A0=CSC_REFERENCE
-https://list.etsi.org/scripts/wa.exe?A0=CSC_REVERSE
-https://list.etsi.org/scripts/wa.exe?A0=CSC_SECPRIV
-https://list.etsi.org/scripts/wa.exe?A0=CSC_SLA
-https://list.etsi.org/scripts/wa.exe?A0=CYBER-STF529-ABE-STEERING-GROUP
-https://list.etsi.org/scripts/wa.exe?A0=CYBER_RED_3DEF_SR
-https://list.etsi.org/scripts/wa.exe?A0=DECT_ADVANCED
-https://list.etsi.org/scripts/wa.exe?A0=DECT_INTEREST_GROUP
-https://list.etsi.org/scripts/wa.exe?A0=DECT_NEWGENERATION
-https://list.etsi.org/scripts/wa.exe?A0=DECT_URLLC
+https://list.etsi.org/scripts/wa.exe?A0=EE2_ANNOUNCE
 https://list.etsi.org/scripts/wa.exe?A0=DELIVERABLE-NOTIFICATIONS
-https://list.etsi.org/scripts/wa.exe?A0=E-SIGNATURES_NEWS
-https://list.etsi.org/scripts/wa.exe?A0=E2NA
-https://list.etsi.org/scripts/wa.exe?A0=ECALL
+https://list.etsi.org/scripts/wa.exe?A0=CLOUD_STANDARDS_COORDINATION
+https://list.etsi.org/scripts/wa.exe?A0=EE1_ANNOUNCE
 https://list.etsi.org/scripts/wa.exe?A0=EDS-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_3GPP_COMMUNITY
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_FORA
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_GUESTS
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_MESA_COMMUNITY
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_MISC
-https://list.etsi.org/scripts/wa.exe?A0=EDS_PROMO_NO_MORE_CUSTOMER
-https://list.etsi.org/scripts/wa.exe?A0=EE2_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=EETNT
-https://list.etsi.org/scripts/wa.exe?A0=EE_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=CLUBDEGOURMANDS
+https://list.etsi.org/scripts/wa.exe?A0=ECALL
+https://list.etsi.org/scripts/wa.exe?A0=DECT_OFDM_EG
+https://list.etsi.org/scripts/wa.exe?A0=EPDECT
+https://list.etsi.org/scripts/wa.exe?A0=ERM_RM_ANNOUNCE
 https://list.etsi.org/scripts/wa.exe?A0=EF3
+https://list.etsi.org/scripts/wa.exe?A0=ERM_EMC_ANNOUNCE
 https://list.etsi.org/scripts/wa.exe?A0=EHEALTH_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=ERM_ACEA
+https://list.etsi.org/scripts/wa.exe?A0=EE_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=EMTEL
+https://list.etsi.org/scripts/wa.exe?A0=ERM_TG23
 https://list.etsi.org/scripts/wa.exe?A0=ERM_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=ERM_COMBINEDE
-https://list.etsi.org/scripts/wa.exe?A0=ERM_EMC_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=ERM_FLX
-https://list.etsi.org/scripts/wa.exe?A0=ERM_ITU-R_WP8A
-https://list.etsi.org/scripts/wa.exe?A0=ERM_ITU-R_WP8A_P
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JOINT_TG34_TG28
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA_A_SMGCS_HS_ASMR
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA_A_SMGCS_HS_MLAT
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA_GBAS
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA_HS_VDL_MODE2
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFEA_UAS
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JTFER
-https://list.etsi.org/scripts/wa.exe?A0=ERM_JWG_CLC_210
-https://list.etsi.org/scripts/wa.exe?A0=ERM_NEWS
-https://list.etsi.org/scripts/wa.exe?A0=ERM_RED
-https://list.etsi.org/scripts/wa.exe?A0=ERM_RM_ANNOUNCE
 https://list.etsi.org/scripts/wa.exe?A0=ERM_TG14
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG17_WG1_2_4
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG21
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG23
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG25
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG25_A_CDM
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG25_A_SMGCS
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG25_DLS
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG31A
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG31C
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG37_DSRC
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG39
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TG41
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TGRX
-https://list.etsi.org/scripts/wa.exe?A0=ERM_TGUWB
-https://list.etsi.org/scripts/wa.exe?A0=ESI
-https://list.etsi.org/scripts/wa.exe?A0=ESI_ALGO
+https://list.etsi.org/scripts/wa.exe?A0=EHEALTH_STARTER_GROUP
+https://list.etsi.org/scripts/wa.exe?A0=ETSI-NEWS
 https://list.etsi.org/scripts/wa.exe?A0=ESI_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=ESI_ASIG
-https://list.etsi.org/scripts/wa.exe?A0=ESI_CSP_CONFORMANCE
-https://list.etsi.org/scripts/wa.exe?A0=ESI_ERS
-https://list.etsi.org/scripts/wa.exe?A0=ESI_PSD2_WORKSHOP
-https://list.etsi.org/scripts/wa.exe?A0=ESI_SIG_CREA_VALID_TSP_SG
-https://list.etsi.org/scripts/wa.exe?A0=ESP_SUPPORT_TESTING
-https://list.etsi.org/scripts/wa.exe?A0=ETSI-EVENTS
 https://list.etsi.org/scripts/wa.exe?A0=ETSI-MEDIA-LIST
-https://list.etsi.org/scripts/wa.exe?A0=ETSI-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=ETSI_AIOTI_COORDINATION
-https://list.etsi.org/scripts/wa.exe?A0=ETSI_CDN
-https://list.etsi.org/scripts/wa.exe?A0=ETSI_M462
-https://list.etsi.org/scripts/wa.exe?A0=ETSI_M493
-https://list.etsi.org/scripts/wa.exe?A0=GA_ART-18_1
-https://list.etsi.org/scripts/wa.exe?A0=GSM_ONBOARD_PLANES
+https://list.etsi.org/scripts/wa.exe?A0=ERM_TG33
+https://list.etsi.org/scripts/wa.exe?A0=ETSI-EVENTS
+https://list.etsi.org/scripts/wa.exe?A0=ERM_TG32
 https://list.etsi.org/scripts/wa.exe?A0=H2020_SMARTGRID_PROJECT_PROPOSAL
-https://list.etsi.org/scripts/wa.exe?A0=HF_MOBILE
-https://list.etsi.org/scripts/wa.exe?A0=HF_MULTICULTURAL_COMMUNICATION
-https://list.etsi.org/scripts/wa.exe?A0=HF_SETUP
-https://list.etsi.org/scripts/wa.exe?A0=HF_TELECAREUX
-https://list.etsi.org/scripts/wa.exe?A0=HIPERMAN_WIMAX_TESTING
-https://list.etsi.org/scripts/wa.exe?A0=HPC_DEG
-https://list.etsi.org/scripts/wa.exe?A0=IC-CG
-https://list.etsi.org/scripts/wa.exe?A0=INS_ISG
-https://list.etsi.org/scripts/wa.exe?A0=INT
-https://list.etsi.org/scripts/wa.exe?A0=IPR
-https://list.etsi.org/scripts/wa.exe?A0=ISG_CCM
-https://list.etsi.org/scripts/wa.exe?A0=ISG_CDP
-https://list.etsi.org/scripts/wa.exe?A0=ISG_ECI
-https://list.etsi.org/scripts/wa.exe?A0=ISG_IP6
-https://list.etsi.org/scripts/wa.exe?A0=ISG_MBC
-https://list.etsi.org/scripts/wa.exe?A0=ISG_MEC_IEG
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC_WI01
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC_WI02
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC_WI03
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC_WI04
-https://list.etsi.org/scripts/wa.exe?A0=ISG_QSC_WI05
-https://list.etsi.org/scripts/wa.exe?A0=ISI_ISG
-https://list.etsi.org/scripts/wa.exe?A0=ITS
-https://list.etsi.org/scripts/wa.exe?A0=ITS-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=ITS-SPECTRUM
-https://list.etsi.org/scripts/wa.exe?A0=ITS_WG1
-https://list.etsi.org/scripts/wa.exe?A0=ITS_WG2
-https://list.etsi.org/scripts/wa.exe?A0=ITS_WG3
-https://list.etsi.org/scripts/wa.exe?A0=ITS_WG4
-https://list.etsi.org/scripts/wa.exe?A0=ITS_WG5
-https://list.etsi.org/scripts/wa.exe?A0=LI-LTE-FAQ-GROUP
-https://list.etsi.org/scripts/wa.exe?A0=LI-NFV-AD-HOC-GROUP
-https://list.etsi.org/scripts/wa.exe?A0=LIS_ISG
+https://list.etsi.org/scripts/wa.exe?A0=HF_USER_PROFILE_MANAGEMENT
+https://list.etsi.org/scripts/wa.exe?A0=GSC-IPR
+https://list.etsi.org/scripts/wa.exe?A0=HF_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=FIT
+https://list.etsi.org/scripts/wa.exe?A0=GRID
+https://list.etsi.org/scripts/wa.exe?A0=IMPACT
 https://list.etsi.org/scripts/wa.exe?A0=LI_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=LTN_ISG
-https://list.etsi.org/scripts/wa.exe?A0=LTS
-https://list.etsi.org/scripts/wa.exe?A0=M2M2014WS_PC
-https://list.etsi.org/scripts/wa.exe?A0=M2M_RAPPORTEURS
+https://list.etsi.org/scripts/wa.exe?A0=M436_RFID_CONSULTATION
+https://list.etsi.org/scripts/wa.exe?A0=M436_RFID_STF
 https://list.etsi.org/scripts/wa.exe?A0=M436_RFID
 https://list.etsi.org/scripts/wa.exe?A0=M436_RFID_CG
-https://list.etsi.org/scripts/wa.exe?A0=M436_RFID_CONSULTATION
-https://list.etsi.org/scripts/wa.exe?A0=MARITIME-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=MARITIME_NEWS
-https://list.etsi.org/scripts/wa.exe?A0=MCD
-https://list.etsi.org/scripts/wa.exe?A0=MCD_CA_DRM_INTEROP
-https://list.etsi.org/scripts/wa.exe?A0=MCD_CDN-I
-https://list.etsi.org/scripts/wa.exe?A0=MCD_INTEREST_GROUP
-https://list.etsi.org/scripts/wa.exe?A0=MCD_MANAGE
-https://list.etsi.org/scripts/wa.exe?A0=MESA_ORGANIZATION
-https://list.etsi.org/scripts/wa.exe?A0=MESA_PS_MEM
-https://list.etsi.org/scripts/wa.exe?A0=MESA_SC
-https://list.etsi.org/scripts/wa.exe?A0=MESA_SSG_SA
-https://list.etsi.org/scripts/wa.exe?A0=MESA_TSG_SYS
-https://list.etsi.org/scripts/wa.exe?A0=MOI_ISG
-https://list.etsi.org/scripts/wa.exe?A0=MSG_TFES_BS_DD
-https://list.etsi.org/scripts/wa.exe?A0=MSG_TFES_UE_DD
-https://list.etsi.org/scripts/wa.exe?A0=MTC
-https://list.etsi.org/scripts/wa.exe?A0=MTC_ISG
-https://list.etsi.org/scripts/wa.exe?A0=NFV_AVINF_WG
-https://list.etsi.org/scripts/wa.exe?A0=NFV_E2E_ARCH
-https://list.etsi.org/scripts/wa.exe?A0=NFV_MANO_WG
-https://list.etsi.org/scripts/wa.exe?A0=NFV_NOC_SMALLTEAM
-https://list.etsi.org/scripts/wa.exe?A0=NFV_PER_EG
-https://list.etsi.org/scripts/wa.exe?A0=NFV_PHASE2
-https://list.etsi.org/scripts/wa.exe?A0=NFV_REQ
-https://list.etsi.org/scripts/wa.exe?A0=NFV_SW_ARCH_WG
-https://list.etsi.org/scripts/wa.exe?A0=NFV_USE_CASES
-https://list.etsi.org/scripts/wa.exe?A0=NGN_IMS
+https://list.etsi.org/scripts/wa.exe?A0=NAG
+https://list.etsi.org/scripts/wa.exe?A0=MTS-IPT-SIGTRAN
+https://list.etsi.org/scripts/wa.exe?A0=MTS-IPT-SIP
+https://list.etsi.org/scripts/wa.exe?A0=NWM_PROJECT_OVERSIGHT
 https://list.etsi.org/scripts/wa.exe?A0=NGN_INTERCONNECT
-https://list.etsi.org/scripts/wa.exe?A0=NSO-CONTACTS
-https://list.etsi.org/scripts/wa.exe?A0=NTECH_AFI
+https://list.etsi.org/scripts/wa.exe?A0=PLT_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=NWM_USERS
+https://list.etsi.org/scripts/wa.exe?A0=ONEM2M_CERTIFICATION
+https://list.etsi.org/scripts/wa.exe?A0=NWM_TECHNICAL_STEERING
 https://list.etsi.org/scripts/wa.exe?A0=OCG_AI
-https://list.etsi.org/scripts/wa.exe?A0=OCG_AN
-https://list.etsi.org/scripts/wa.exe?A0=OCG_MCP
+https://list.etsi.org/scripts/wa.exe?A0=NUG
 https://list.etsi.org/scripts/wa.exe?A0=OCG_RED
+https://list.etsi.org/scripts/wa.exe?A0=NSO_OFFICIAL_CONTACTS
+https://list.etsi.org/scripts/wa.exe?A0=NSO_INFO
+https://list.etsi.org/scripts/wa.exe?A0=NGN_IMS
 https://list.etsi.org/scripts/wa.exe?A0=OCG_SECURITY
-https://list.etsi.org/scripts/wa.exe?A0=ORI_ISG
-https://list.etsi.org/scripts/wa.exe?A0=OSG_ISG
-https://list.etsi.org/scripts/wa.exe?A0=PLT
-https://list.etsi.org/scripts/wa.exe?A0=PLT_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=PLT_INHOUSE
-https://list.etsi.org/scripts/wa.exe?A0=PLT_WI_DISCUSSION
-https://list.etsi.org/scripts/wa.exe?A0=PLU_RFID_CHINA
+https://list.etsi.org/scripts/wa.exe?A0=OPENAPI_TF
+https://list.etsi.org/scripts/wa.exe?A0=NSOS_TRANSLATORS
+https://list.etsi.org/scripts/wa.exe?A0=OCG_AN
+https://list.etsi.org/scripts/wa.exe?A0=S1_LCS
+https://list.etsi.org/scripts/wa.exe?A0=SCP_PLENARY
+https://list.etsi.org/scripts/wa.exe?A0=S1_CAMEL
 https://list.etsi.org/scripts/wa.exe?A0=PORTAL-FEATURE-REQUESTS
-https://list.etsi.org/scripts/wa.exe?A0=QKD_ISG
-https://list.etsi.org/scripts/wa.exe?A0=RAIL-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=RRS_WG4
-https://list.etsi.org/scripts/wa.exe?A0=RT
-https://list.etsi.org/scripts/wa.exe?A0=RT_DMO
-https://list.etsi.org/scripts/wa.exe?A0=RT_NG2R
+https://list.etsi.org/scripts/wa.exe?A0=SCP_TECHNICAL
+https://list.etsi.org/scripts/wa.exe?A0=SES_AES
+https://list.etsi.org/scripts/wa.exe?A0=S1_CHARGING
+https://list.etsi.org/scripts/wa.exe?A0=S1_QOS
+https://list.etsi.org/scripts/wa.exe?A0=S1_SMS
+https://list.etsi.org/scripts/wa.exe?A0=SCP_REQUIREMENTS
+https://list.etsi.org/scripts/wa.exe?A0=SCP_TEST
+https://list.etsi.org/scripts/wa.exe?A0=S1_ANSI-41
+https://list.etsi.org/scripts/wa.exe?A0=SA1_OSA
+https://list.etsi.org/scripts/wa.exe?A0=S1_VHE
 https://list.etsi.org/scripts/wa.exe?A0=SES_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=SES_BSM
-https://list.etsi.org/scripts/wa.exe?A0=SES_BSM_C2P
-https://list.etsi.org/scripts/wa.exe?A0=SES_ECAS
-https://list.etsi.org/scripts/wa.exe?A0=SES_GMR_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=SES_MSS
-https://list.etsi.org/scripts/wa.exe?A0=SES_SDR
-https://list.etsi.org/scripts/wa.exe?A0=SES_SUMTS_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=SG_GNGN
-https://list.etsi.org/scripts/wa.exe?A0=SG_UCI
-https://list.etsi.org/scripts/wa.exe?A0=SMG_PLENARY
-https://list.etsi.org/scripts/wa.exe?A0=SMT_ISG
-https://list.etsi.org/scripts/wa.exe?A0=SPR-NEWS
-https://list.etsi.org/scripts/wa.exe?A0=STF496_ERMTG26_RED
-https://list.etsi.org/scripts/wa.exe?A0=STF504_STQ_EMODET
-https://list.etsi.org/scripts/wa.exe?A0=STF510_SMARTM2M_SAP_TEST
-https://list.etsi.org/scripts/wa.exe?A0=STF514
-https://list.etsi.org/scripts/wa.exe?A0=STF517_ITS_VALIDATION
-https://list.etsi.org/scripts/wa.exe?A0=STF518
-https://list.etsi.org/scripts/wa.exe?A0=STF519_INT_S1AP_TEST
-https://list.etsi.org/scripts/wa.exe?A0=STF525_INTEROP_PLATFORM
-https://list.etsi.org/scripts/wa.exe?A0=STF527_TEST_GEONW
-https://list.etsi.org/scripts/wa.exe?A0=STF528_DECT
+https://list.etsi.org/scripts/wa.exe?A0=S1_HANDOVER
+https://list.etsi.org/scripts/wa.exe?A0=S1_PRESENCE
+https://list.etsi.org/scripts/wa.exe?A0=S1_MM
+https://list.etsi.org/scripts/wa.exe?A0=SCP_WG3
+https://list.etsi.org/scripts/wa.exe?A0=S1_IP
+https://list.etsi.org/scripts/wa.exe?A0=SCP_WG2
+https://list.etsi.org/scripts/wa.exe?A0=SCP_WG1
+https://list.etsi.org/scripts/wa.exe?A0=S1_MULTICALL
+https://list.etsi.org/scripts/wa.exe?A0=STF501_NTECH_AFI
+https://list.etsi.org/scripts/wa.exe?A0=STF505_IOT_INFO
+https://list.etsi.org/scripts/wa.exe?A0=STANDARDS4CITIZENS
+https://list.etsi.org/scripts/wa.exe?A0=SMART_GRIDS
+https://list.etsi.org/scripts/wa.exe?A0=STF501_NTECH_AFI_SG
 https://list.etsi.org/scripts/wa.exe?A0=STF530_NFV
-https://list.etsi.org/scripts/wa.exe?A0=STF533
-https://list.etsi.org/scripts/wa.exe?A0=STF536_REVISION_EN_301549
-https://list.etsi.org/scripts/wa.exe?A0=STQ
-https://list.etsi.org/scripts/wa.exe?A0=STQ_AURORA
-https://list.etsi.org/scripts/wa.exe?A0=SWCOPYRIGHT
-https://list.etsi.org/scripts/wa.exe?A0=TESTCOM_2003_TPC
-https://list.etsi.org/scripts/wa.exe?A0=TEST_DB
-https://list.etsi.org/scripts/wa.exe?A0=TETRAWG1_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=TETRAWG38
-https://list.etsi.org/scripts/wa.exe?A0=TETRAWG3_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=STF514
+https://list.etsi.org/scripts/wa.exe?A0=STF524_ESI_VALID
+https://list.etsi.org/scripts/wa.exe?A0=STF505_IOT
+https://list.etsi.org/scripts/wa.exe?A0=STF529_CYBER_ABE
+https://list.etsi.org/scripts/wa.exe?A0=SES_SUMTS_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=STF515_EDUC
+https://list.etsi.org/scripts/wa.exe?A0=STF531_SMARTM2M
+https://list.etsi.org/scripts/wa.exe?A0=STF522_TDL_PH4
+https://list.etsi.org/scripts/wa.exe?A0=TFES
+https://list.etsi.org/scripts/wa.exe?A0=TESTING_PROJECTS
 https://list.etsi.org/scripts/wa.exe?A0=TETRAWG4_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=TETRAWG5_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=TETRAWG6_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=TETRAWG3_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=TDL
 https://list.etsi.org/scripts/wa.exe?A0=TETRAWG8_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=STF539_TC_ESI
+https://list.etsi.org/scripts/wa.exe?A0=TETRAWG1_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=TETRAWG5_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=TBINFO
+https://list.etsi.org/scripts/wa.exe?A0=STF561_ADVISORY_GROUP
 https://list.etsi.org/scripts/wa.exe?A0=TETRA_ANNOUNCE
-https://list.etsi.org/scripts/wa.exe?A0=TETRA_WORKSHOP
-https://list.etsi.org/scripts/wa.exe?A0=TEXEL
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_EMTEL
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_F-MMS
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_FORUM
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_FUTURE_ACTIVITIES
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_GEN
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_NGN
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_STF328_SG
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG1
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG2
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG2_IPTV
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG3
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG3_IPTV_STAGE3
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG4
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG5
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG5_OLD
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG6
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG7
-https://list.etsi.org/scripts/wa.exe?A0=TISPAN_WG8
-https://list.etsi.org/scripts/wa.exe?A0=TM1-WP1
-https://list.etsi.org/scripts/wa.exe?A0=TM1-WP2
-https://list.etsi.org/scripts/wa.exe?A0=TM6_ALL
-https://list.etsi.org/scripts/wa.exe?A0=TMSIX_OPS
+https://list.etsi.org/scripts/wa.exe?A0=STF536_REVISION_EN_301549
+https://list.etsi.org/scripts/wa.exe?A0=TETRAWG6_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=STF537SURVEY
 https://list.etsi.org/scripts/wa.exe?A0=USER_ANNOUNCE
+https://list.etsi.org/scripts/wa.exe?A0=UNIVERSITY_AND_ACADEMIA
+https://list.etsi.org/scripts/wa.exe?A0=TM1-ATM
+https://list.etsi.org/scripts/wa.exe?A0=TISPAN_FORUM
+https://list.etsi.org/scripts/wa.exe?A0=TTCN3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_CT89_E_MEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_122E_SERVICES
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_108E_NON_PCC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_MEETING_HOSTING_COORD
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_WG5
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_CT91_E_MEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG4
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_CT88_E_MEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_MENTORING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_AH_ITUT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_PCC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_122E_GENERAL
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_RUN4RAN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_122E_5G
+https://list.etsi.org/scripts/wa.exe?A0=3GPP-REVIEW
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_BBF_FMC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_122E_MC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_108E_MAIN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_E_MAIN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_WG4
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG2
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_WG2
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_WG5_JOINTAPIWORK
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN_WG3
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_3GPP2_SCM
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_MAIN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_NON_PCC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_E_MC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_E_SERVICES
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG3_108E_PCC
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_COMMON_IMS_XFER
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_CT90_E_MEETING
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_ORGANIZATION
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_IETF-COORD
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_122E_IMS
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_MMS_SMS_CBS_AT
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CN
+https://list.etsi.org/scripts/wa.exe?A0=3GPP_TSG_CT_WG1_E_IMS
diff --git a/examples/url_collections/listserv.IEEE.txt b/examples/url_collections/listserv.IEEE.txt
new file mode 100644
index 00000000..92bfd7e0
--- /dev/null
+++ b/examples/url_collections/listserv.IEEE.txt
@@ -0,0 +1,10 @@
+https://listserv.ieee.org/cgi-bin/wa?A0=STDS-802-PRIVACY
+https://listserv.ieee.org/cgi-bin/wa?A0=STDS-802-1-MINUTES
+https://listserv.ieee.org/cgi-bin/wa?A0=STDS-802-15-14
+https://listserv.ieee.org/cgi-bin/wa?A0=TORONTO-YP
+https://listserv.ieee.org/cgi-bin/wa?A0=STDS-802-15-15
+https://listserv.ieee.org/cgi-bin/wa?A0=IEEE-TEST
+https://listserv.ieee.org/cgi-bin/wa?A0=IEEE-OC-Jobs
+https://listserv.ieee.org/cgi-bin/wa?A0=GamesSIG
+https://listserv.ieee.org/cgi-bin/wa?A0=EREFLECTOR
+https://listserv.ieee.org/cgi-bin/wa?A0=IEEEOREGON-ANNOUNCE


Test patch:
diff --git a/tests/webscraping/test_listserv.py b/tests/webscraping/test_listserv.py
index 6a8de24e..4a36d112 100644
--- a/tests/webscraping/test_listserv.py
+++ b/tests/webscraping/test_listserv.py
@@ -1,3 +1,4 @@
+from time import time
 import os
 import tempfile
 from pathlib import Path
@@ -12,9 +13,9 @@
 from config.config import CONFIG
 
 dir_temp = tempfile.gettempdir()
-url_archive = "https://list.etsi.org/scripts/wa.exe?"
-url_list = url_archive + "A0=3GPP_TSG_CT_WG6"
-url_message = url_archive + "A2=ind2101A&L=3GPP_TSG_CT_WG6&O=D&P=1870"
+url_archive = "https://listserv.ieee.org/cgi-bin/wa?"
+url_list = url_archive + "A0=IEEE-TEST"
+url_message = url_archive + "A2=ind1511d&L=IEEE-TEST&P=67"
 file_temp_mbox = dir_temp + "/listserv.mbox"
 file_auth = CONFIG.config_path + "authentication.yaml"
 auth_key_mock = {"username": "bla", "password": "bla"}
@@ -29,18 +30,18 @@ def test__from_url_with_login(self):
         with open(file_auth, "r") as stream:
             auth_key = yaml.safe_load(stream)
         msg = ListservMessage.from_url(
-            list_name="3GPP_TSG_CT_WG6",
+            list_name="IEEE-TEST",
             url=url_message,
             fields="total",
             login=auth_key,
         )
-        assert msg.fromaddr == "Kimmo.Kymalainen@ETSI.ORG"
-        assert msg.toaddr == "Kimmo.Kymalainen@ETSI.ORG"
+        assert msg.fromaddr == "[log in to unmask]"
+        assert msg.toaddr == None
 
     @pytest.fixture(name="msg", scope="module")
     def get_message(self):
         msg = ListservMessage.from_url(
-            list_name="3GPP_TSG_CT_WG6",
+            list_name="IEEE-TEST",
             url=url_message,
             fields="total",
             login=auth_key_mock,
@@ -48,18 +49,18 @@ def get_message(self):
         return msg
 
     def test__message_content(self, msg):
-        assert msg.body.split(",")[0] == "Dear 3GPP CT people"
-        assert msg.subject == "Happy New Year 2021"
-        assert msg.fromname == "Kimmo Kymalainen"
+        assert msg.body.split("C")[0] == "=================================================\n"
+        assert msg.subject == "10th International Conference on Electrical Engineering (ICEENG'10)"
+        assert msg.fromname == "iceeng 10"
         assert msg.fromaddr == "[log in to unmask]"
-        assert msg.toname == "Kimmo Kymalainen"
-        assert msg.toaddr == "[log in to unmask]"
-        assert msg.date == "Tue Jan  5 12:15:30 2021"
-        assert msg.contenttype == "multipart/related"
+        assert msg.toname == None
+        assert msg.toaddr == None
+        assert msg.date == "Mon Nov 23 11:00:37 2015"
+        assert msg.contenttype == "multipart/mixed"
 
     def test__only_header_from_url(self):
         msg = ListservMessage.from_url(
-            list_name="3GPP_TSG_CT_WG6",
+            list_name="IEEE-TEST",
             url=url_message,
             fields="header",
             login=auth_key_mock,
@@ -68,7 +69,7 @@ def test__only_header_from_url(self):
 
     def test__only_body_from_url(self):
         msg = ListservMessage.from_url(
-            list_name="3GPP_TSG_CT_WG6",
+            list_name="IEEE-TEST",
             url=url_message,
             fields="body",
             login=auth_key_mock,
@@ -83,9 +84,9 @@ def test__to_mbox(self, msg):
         msg.to_mbox(file_temp_mbox)
         f = open(file_temp_mbox, "r")
         lines = f.readlines()
-        assert len(lines) == 29
+        assert len(lines) == 57
         assert (
-            lines[1] == "From b'[log in to unmask]' Tue Jan  5 12:15:30 2021\n"
+            lines[1] == "From b'[log in to unmask]' Mon Nov 23 11:00:37 2015\n"
         )
         f.close()
         Path(file_temp_mbox).unlink()
@@ -100,28 +101,26 @@ def test__from_url_with_login(self):
         with open(file_auth, "r") as stream:
             auth_key = yaml.safe_load(stream)
         mlist = ListservList.from_url(
-            name="3GPP_TSG_CT_WG6",
+            name="IEEE-TEST",
             url=url_list,
             select={
-                "years": 2021,
-                "months": "January",
-                "weeks": 1,
+                "years": 2015,
+                "months": "November",
+                "weeks": 4,
                 "fields": "header",
             },
             login=auth_key,
         )
-        assert mlist.messages[0].fromaddr == "Kimmo.Kymalainen@ETSI.ORG"
-        assert mlist.messages[0].toaddr == "Kimmo.Kymalainen@ETSI.ORG"
+        assert mlist.messages[0].fromaddr == "[log in to unmask]"
+        assert mlist.messages[0].toaddr == None
 
     @pytest.fixture(name="mlist", scope="module")
     def get_mailinglist(self):
         mlist = ListservList.from_url(
-            name="3GPP_TSG_CT_WG6",
+            name="IEEE-TEST",
             url=url_list,
             select={
-                "years": 2021,
-                "months": "January",
-                "weeks": 1,
+                "years": 2015,
                 "fields": "header",
             },
             login=auth_key_mock,
@@ -129,72 +128,47 @@ def get_mailinglist(self):
         return mlist
 
     def test__mailinglist_content(self, mlist):
-        assert mlist.name == "3GPP_TSG_CT_WG6"
+        assert mlist.name == "IEEE-TEST"
         assert mlist.source == url_list
-        assert len(mlist) == 3
-        assert mlist.messages[0].subject == "Happy New Year 2021"
+        assert len(mlist) == 1
+        assert mlist.messages[0].subject == "10th International Conference on Electrical Engineering (ICEENG'10)"
 
     def test__to_dict(self, mlist):
         dic = mlist.to_dict()
         assert len(list(dic.keys())) == 8
-        assert len(dic[list(dic.keys())[0]]) == 3
+        assert len(dic[list(dic.keys())[0]]) == 1
 
     def test__to_pandas_dataframe(self, mlist):
         df = mlist.to_pandas_dataframe()
         assert len(df.columns.values) == 8
-        assert len(df.index.values) == 3
+        assert len(df.index.values) == 1
 
     def test__to_mbox(self, mlist):
         mlist.to_mbox(dir_temp, filename=mlist.name)
         file_temp_mbox = f"{dir_temp}/{mlist.name}.mbox"
         f = open(file_temp_mbox, "r")
         lines = f.readlines()
-        assert len(lines) == 30
+        assert len(lines) == 10
         assert (
-            lines[21]
-            == "From b'[log in to unmask]' Tue Jan  5 09:28:25 2021\n"
+            lines[1]
+            == "From b'[log in to unmask]' Mon Nov 23 11:00:37 2015\n"
         )
         f.close()
         Path(file_temp_mbox).unlink()
 
 
 class TestListservArchive:
-    @pytest.mark.skipif(
-        not os.path.isfile(file_auth),
-        reason="Key to log into LISTSERV could not be found",
-    )
-    def test__from_url_with_login(self):
-        with open(file_auth, "r") as stream:
-            auth_key = yaml.safe_load(stream)
-        arch = ListservArchive.from_url(
-            name="3GPP",
-            url_root=url_archive,
-            url_home=url_archive + "HOME",
-            select={
-                "years": 2021,
-                "months": "January",
-                "weeks": 1,
-                "fields": "header",
-            },
-            login=auth_key,
-            instant_save=False,
-            only_mlist_urls=False,
-        )
-        assert (
-            arch.lists[0].messages[0].fromaddr == "Kimmo.Kymalainen@ETSI.ORG"
-        )
-        assert arch.lists[0].messages[0].toaddr == "Kimmo.Kymalainen@ETSI.ORG"
-
     @pytest.fixture(name="arch", scope="session")
     def get_mailarchive(self):
+        start = time()
         arch = ListservArchive.from_url(
-            name="3GPP",
+            name="IEEE",
             url_root=url_archive,
             url_home=url_archive + "HOME",
             select={
-                "years": 2021,
-                "months": "January",
-                "weeks": 1,
+                "years": 2015,
+                "months": "November",
+                "weeks": 4,
                 "fields": "header",
             },
             login=auth_key_mock,
@@ -206,29 +180,26 @@ def get_mailarchive(self):
     def test__archive_content(self, arch):
         mlist_names = [mlist.name for mlist in arch.lists]
         mlist_len = [len(mlist) for mlist in arch.lists]
-        assert arch.name == "3GPP"
+        assert arch.name == "IEEE"
         assert arch.url == url_archive
-        assert len(arch) == 13
-        assert len(arch.lists[0]) == 3
-        assert arch.lists[0].messages[0].subject == "Happy New Year 2021"
+        assert len(arch) == 1
+        assert len(arch.lists[0]) == 1
+        assert arch.lists[0].messages[0].subject == "10th International Conference on Electrical Engineering (ICEENG'10)"
 
     def test__to_dict(self, arch):
         dic = arch.to_dict()
         assert len(list(dic.keys())) == 9
-        assert len(dic[list(dic.keys())[0]]) == 221
+        assert len(dic[list(dic.keys())[0]]) == 1
 
     def test__to_pandas_dataframe(self, arch):
         df = arch.to_pandas_dataframe()
         assert len(df.columns.values) == 9
-        assert len(df.index.values) == 221
+        assert len(df.index.values) == 1
 
     def test__to_mbox(self, arch):
         arch.to_mbox(dir_temp)
         file_dic = {
-            f"{dir_temp}/3GPP_TSG_CT_WG6.mbox": 30,
-            f"{dir_temp}/3GPP_TSG_RAN_WG3.mbox": 40,
-            f"{dir_temp}/3GPP_TSG_RAN.mbox": 30,
-            f"{dir_temp}/3GPP_TSG_RAN_WG4.mbox": 300,
+            f"{dir_temp}/IEEE-TEST.mbox": 10,
         }
         for filepath, line_nr in file_dic.items():
             assert Path(filepath).is_file()