2015-01-12 2 views
0

우리는 apache_log 파서를 가지고 있습니다. 우리는 봇을 실제로 봇 (bot_list)의 목록을 분석하기 위해 여러 번 시도했습니다. 그러나 성공하지 못했습니다. 우리는 두 개의 목록을 비교해 보았지만 봇은 목록이되거나 목록이 아닙니다.python - 봇 구문 true 봇 목록 (bot_list)

우리가 원하는 것은 봇이 bot_list를 먼저 통과한다는 것입니다. 그래서 그 봇을 통해서 오는 봇만 bot_list에 없습니다.

log = apache_log(lines) 

for r in log: 
    bot = r['bot'] 



bot_list = [ "Googlebot/2.1", 
      "AhrefsBot/5.0", 
      "bingbot/2.0", 
      "DotBot/1.1", 
      "MJ12bot/v1.4.5", 
      "SearchmetricsBot", 
      "YandexBot/3.0", 
      ] 

이 방법으로 하나의 봇에서 작동합니다.

bot = r['bot'].strip() 
if not bot.startswith("Googlebot/2.1"): 

이것은 우리의 필터 인 bot.startwith입니다. 그러나 bot_list를 처음으로 통과하는 방법을 얻으려면 어떻게해야합니까?

누군가가 올바른 방향으로 나아갈 수 있기를 바랍니다.

+0

과 동일 https://docs.python.org/2/library/stdtypes.html#str.startswith). –

+0

Ashwini Chaudhary - 우리가 startswith를 사용할 수있는 방법을 이해하는 데 도움이 된 감사합니다. 우리는 그 질문을 얻었다. –

답변

1

문제점을 이해 한 경우 bot가 bot_list에 없는지 확인할 수 있습니다. 나는 로그 파일에서 봇 이름을 가져 제안 :

bot_name = r["bot"].split(" ")[22] 
if bot_name not in bot_list: 

(22)이 로그 파일, which you might have already customized에서 사용자 에이전트의 위치하자.

위치가 명확하지 않으면 당신이 기능을 사용할 수 있습니다 : 당신은 ([`str.startswith`]에 접두사의 튜플을 통과 할 수

if not len(filter(lambda x: x in r["bot"], bot_list)): 

return_list = [] 
for i in bot_list: 
    if i in r["bot"]: 
     return_list.append(i) 
return len(return_list) 
+0

TuTTe - 고마워요, bot_name = r [ "bot"] .spilt ("") [8] 않고. 우리는 무언가를 찾고 있었지만 "bot_list에 bot_name이 없다면이 하나에 올 수 없었습니다 :"그래서 우리에게 감사드립니다. –