Оптимизация парсера
Какими методами можно оптимизировать парсер 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