2016-10-27 1 views
0

Прежде чем я углубится в детали, обратите внимание, что я не программист. Просто изучая python и начинаю разбираться с вещами. Теперь к вопросу:Скрипт Google Autocomplete обрезает результаты на основе строки ввода в Python 2.7.12

Я адаптировал autocomplete string generator, чтобы добавить список вопросов. Кажется, что он почти работает, но я попадаю на некоторые проблемы с форматированием в выходном файле.

Вот адаптированный код (это слишком много, но я ищу что-то для работы, прежде чем улучшать его).

import urllib, urllib2 
import json 
import time 
import codecs 

inFile = 'keywordFile.txt' 
sep = ',' 
keywordField = 'keyword' 
outFile = 'autoCompFile.txt' 

google_endpoint = 'http://google.com/complete/search?output=firefox&q=' 

def find_index(fieldname, inFile): 
    with open(inFile, 'r') as f: 
     header = f.readline().rstrip().split(sep) 
     i = 0 
     for i in range(0, len(header)): 
      if header[i] == fieldname: 
       return i 
       break 
     else: 
      return -1 

def build_phrase(keyword):  
    phrase = u'why did' 
    return u'%s %s' % (phrase, keyword) 

def query_google(phrase): 
    url = '%s%s' % (google_endpoint, urllib.quote_plus(phrase)) 
    data = urllib2.urlopen(url) 
    data = json.load(data) 
    results = [result.replace(phrase.lower(), '') for result in data[1]] 
    return results 

kwIndex = find_index(keywordField, inFile) 

with codecs.open(inFile, 'r', 'utf-8') as f: 

    with codecs.open(outFile, 'w', 'utf-8') as f_out: 
     f_out.write('keyword, autocomplete phrase\n') 

     data = f.readlines() 
     for record in data[1:]: 
      time.sleep(0.3) 

      record = record.rstrip() 
      items = record.split(sep) 
      kw = items[kwIndex] 

      phrase = build_phrase(kw) 
      results = query_google(phrase) 
      if len(results) > 0: 
       for result in results: 
        f_out.write('%s, %s, %s\n' % (kw, phrase, result)) 
      else: 
       f_out.write('%s, %s\n' % (kw, phrase)) 

Что-то в коде вызывает «результат», чтобы усечение, если она включает в себя точную формулировку построенной фразы. Пример вывода:

  • бюрократия, почему бюрократия, развиваться в начале правительства
  • бюрократии, почему бюрократия, стала ветвью власти
  • бюрократии, почему бюрократия, расти в 20-м веке
  • бюрократия, почему бюрократия, почему бюрократия развивается в египте
  • бюрократии, почему бюрократия, почему вб считает бюрократию идеальной
  • бюрократии, почему бюрократия, почему ди d федеральная бюрократия выросла
  • бюрократии, почему бюрократия, почему Weber исследование бюрократии
  • бюрократия, почему бюрократия, почему М.Вебер страх бюрократии

В идеале, я хотел бы получить ключевое слово и полная строка результатов без какого-либо усечения. Поэтому я хочу, чтобы оба случая выглядели так:

  • Бюрократия, почему бюрократия, почему бюрократия стала ветвью власти?
  • бюрократия, почему бюрократия, почему бюрократия развивается в египте

Спасибо заранее!

+0

Я не думаю, что это не имеет ничего общего с Python ... Кажется, больше похоже, как Google API реализован. EDIT: на самом деле, после прочтения вашего вопроса снова проблема понятна: 'results = [result.replace (phrase.lower(), '') для результата в данных [1]]' Вы избавляетесь от фраза из ваших результатов ... Это именно то, что делает код. Ответ будет приведен ниже. – Lunaweaver

ответ

0

Похоже, что вы удаляете фразу из своих результатов. Так что ваш код делает именно то, что вы написали это сделать ...

Удалить эту линию:

results = [result.replace(phrase.lower(), '') for result in data[1]] 
+0

Он работал, когда я заменил эту строку результатами = data [1]. Спасибо, что выяснили, где все идет не так! Очень благодарен! – yannenkar