whitegtr
@whitegtr
Эникей :с

Как правильно написать парсер?

Вопрос состоит в следующем.
Есть лог, нужно сделать парсер.
1945827 xx.xxx.xxx.xxx TCP_TUNNEL/200 6811 CONNECT mail.ru:443 username HIER_DIRECT/xxx.xxx.xxx -

Как сделать парсер?
Нашел в интернете что - то типо такого
# -*- coding: utf-8 -*-
import datetime

f = open('/var/log/squid/access.log', 'r',encoding='UTF-8')

for line in f.readlines():
    try:
        dt = str( datetime.date.fromtimestamp( float( line.split( )[0][0:10] ) ) )
    except:
        dt = u'Error'
    
    try:
        ip = line.split( )[2]
    except:
        ip = u'Error'
    
    try:
        bytes = line.split( )[4]
    except:
        bytes = u'Error'
    
    try:
        miss = line.split( )[3]
        if miss == 'NONE/400':
            query = line.split( )[3]
            
        else:
            query = line.split( )[6]
    except:
        query = line.split( )[3]
    
    if dt != 'Error' and ip != 'Error' and bytes != 'Error' and miss != 'NONE/400':
        print ( dt + ' - ' + ip + ' - ' + bytes + ' - ' + query )
    else:
        continue
    

f.close()
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
ScriptKiddo
@ScriptKiddo
Используйте Grok. Это RegExp с плюшками

https://pypi.org/project/pygrok/

from pygrok import Grok
text = 'gary is male, 25 years old and weighs 68.5 kilograms'
pattern = '%{WORD:name} is %{WORD:gender}, %{NUMBER:age} years old and weighs %{NUMBER:weight} kilograms'
grok = Grok(pattern)
print grok.match(text)

# {'gender': 'male', 'age': '25', 'name': 'gary', 'weight': '68.5'}


Grok'и для Squid'а можно нагуглить очень просто. Или лучше - написать самостоятельно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы