Оптимизация парсера

Какими методами можно оптимизировать парсер html страницы (1800 строк). Первое что пришло в голову это:

pattern = r"Link--primary.+(https?://.+)\"" # (регулярка работает если что)
preparse = # (тот самый html код)
for i in preparse.splitlines():
    i = i.rstrip()
    match = re.search(pattern, i)
    if match:
        print(match.group(1))

Но дело в том, что выполняется код 8-10 секунд. Есть предложения по ускорению работы?

БЕЗ bs4 ПОЖАЛУЙСТА)


Ответы (1 шт):

Автор решения: Andy Pavlov

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

import re
import time

html = '...'  # Взял текст по ссылке автора https://github.com/phony51/GitProfileParser/blob/main/github.html

def find_pat(html):
    m = []
    pattern = r"Link--primary.+(https?://.+)\"" # (регулярка работает если что)
    for i in html.splitlines():
        i = i.rstrip()
        match = re.search(pattern, i)
        if match:
            m.append(match.group(1))
    return m

s = time.time()
for _ in range(1000):
    pattern = re.compile("Link--primary.*\s*(https?://.*)\"")
    e = pattern.findall(html)
print(e, time.time() - s)

s = time.time()
for _ in range(1000):
    m = find_pat(html)
print(m, time.time() - s)

Результат:

['http://index.php'] 0.008782386779785156
['http://index.php'] 0.09662365913391113
→ Ссылка