Python 谷歌api搜索结果

Python 谷歌api搜索结果,python,google-app-engine,google-api,Python,Google App Engine,Google Api,嗨,我正在尝试使用谷歌应用程序引擎创建一个学术项目。 我想通过GoogleAPI实现的主要功能是搜索用户输入的查询并返回结果,然后我可以对结果进行进一步分析。xgoogle是我的第一次尝试,但它有导入错误(我可以在本地运行相同的代码)与谷歌api引擎。即使是XGoogleWorks,我也不知道如何获得不同网站的内容。 我想知道是否有任何方法可以将谷歌搜索结果作为文档返回。多谢各位 代码部分使用正则表达式查找html代码中的包含项,但它无法用于具有不同html布局的网站。多谢各位 #!/usr/b

嗨,我正在尝试使用谷歌应用程序引擎创建一个学术项目。 我想通过GoogleAPI实现的主要功能是搜索用户输入的查询并返回结果,然后我可以对结果进行进一步分析。xgoogle是我的第一次尝试,但它有导入错误(我可以在本地运行相同的代码)与谷歌api引擎。即使是XGoogleWorks,我也不知道如何获得不同网站的内容。 我想知道是否有任何方法可以将谷歌搜索结果作为文档返回。多谢各位

代码部分使用正则表达式查找html代码中的包含项,但它无法用于具有不同html布局的网站。多谢各位

#!/usr/bin/env python
from html import HTML_PAGE
import webapp2
import jinja2
import os
import re
import sys

from os import walk
from google.appengine.api import search
from google.appengine.ext import ndb
from urllib import urlopen
from cgi import parse_qs

from xgoogle.search import GoogleSearch, SearchError


page = HTML_PAGE()

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.out.write(page.pageChange())




class SearchFile():
    def __init__(self,userInput=''):
        self.__input = userInput
        self.__result = {}
        self.__files = []
        self.__filenames =[]
        for (dirpath, dirnames, filenames) in walk("dataFolder"):
            for name in filenames:
                path = dirpath+"/"+name
                self.__files.append(path)
                self.__filenames.append(name)
            break
    def outPutData(self):
        iterator = range(0,len(self.__filenames))
        for i in iterator:
            with open(self.__files[i]) as f:
                for line in f:
                    if self.__input in line:
                        self.__result[self.__filenames[i]] = line
                        break
            f.close()
        return self.__result  


class SearchFileHandle(webapp2.RequestHandler):
    def post(self):
        userInput = str(self.request.get('input'))
        self.response.out.write(page.pageChange(userInput))        

        search = SearchFile(userInput)
        tramText = CropText()

        for key,value in search.outPutData().iteritems():
            keyBold = "<b>%s</b><br>"%(key)
            keyLink = "<a href = \"dataFolder/%s\" name =\"%s\"> %s </a>"%(key,key,keyBold)
            self.response.out.write(keyLink)      
            #print >>sys.stderr, "====>", re.search(regex, value,re.IGNORECASE)
            resultContain = tramText.tram(value,userInput)
            for word in resultContain.split(" "):
                if word in userInput:
                    for keyWord in userInput.split(" "):
                        if word == keyWord:
                            self.response.out.write(" <b>%s</b> "%(word))
                else:
                    self.response.out.write(" %s "%(word))
            self.response.out.write("<br><br><br>")    
        news =  TakeNews()
        for key,value in news.websiteRead(userInput).iteritems():
            keyBold = "<b>%s</b><br>"%(key)
            keyLink = "<a href = %s> %s </a>"%(value,keyBold)
            self.response.out.write(keyLink)
            self.response.out.write("<br><br><br>")


        googleSearch = WebSearch(userInput)
        results = googleSearch.returnResult()
        for res in results:
            self.response.out.write(res)
            self.response.out.write("<br><br><br>")


class CropText():
    def tram(self,text,word):
        regex = r"( .*? )"+re.escape(word)+r"( .*?\.)"
        #print >>sys.stderr, text
        if re.search(regex,text,re.IGNORECASE):
            return re.search(regex,text,re.IGNORECASE).group()
        else:
            return ''


class TakeNews():
    def __init__(self):
        self.__website = 'http://www.bloomberg.com'
        self.__topNews =''
        self.__topNewsTitle =''


    def setWebsite(self,website):
        if (website[:10] != 'http://www') and not('http://www' in website):
            website = 'http://www' + website
        self.__website =  website


    def websiteRead(self,userInput):
        webpage = urlopen(self.__website).read()  
        pathFinderTopNewsTitle = re.compile('<a class=\"icon-article-headline\".*<span class=\'headline\'>(.*)</span>')
        pathFinderTopNews = re.compile('<a class=\"icon-article-headline\" data-id=.* data-type=.* href=\"(.*)\"><span class=\'headline\'>')
        self.__topNewsTitle =  re.findall(pathFinderTopNewsTitle,webpage)
        self.__topNews = re.findall(pathFinderTopNews,webpage)
        result = {}
        iterator = range(0,len(self.__topNewsTitle))
        for i in iterator:
            if userInput in self.__topNews[i]:
                result[self.__topNewsTitle[i]] = self.__website+"/"+self.__topNews[i]
        return result

class WebSearch():
    def __init__(self,word):
        self.__search = word
    def returnResult(self):
        gs = GoogleSearch(self.__search)
        gs.results_per_page = 200
        return gs.get_results()


def main():
    app.run()


app = webapp2.WSGIApplication([('/',MainPage),
                            ('/searchFile',SearchFileHandle)
                            ],
                            debug =True)

if __name__ == "__main__":
    main()
#/usr/bin/env python
从html导入html_页面
导入webapp2
进口金玉2
导入操作系统
进口稀土
导入系统
从操作系统导入漫游
从google.appengine.api导入搜索
从google.appengine.ext导入ndb
从urllib导入urlopen
从cgi导入解析
从xgoogle.search导入GoogleSearch,SearchError
page=HTML\u page()
类主页(webapp2.RequestHandler):
def get(自我):
self.response.out.write(page.pageChange())
类SearchFile():
定义初始化(self,用户输入=“”):
self.\uuu输入=用户输入
self.\uuu result={}
self._文件=[]
self.\uuu文件名=[]
对于walk(“数据文件夹”)中的(目录路径、目录名、文件名):
对于文件名中的名称:
路径=目录路径+“/”+名称
self.\u files.append(路径)
self.\uuu文件名.append(名称)
打破
def输出数据(自身):
迭代器=范围(0,len(self.\uu文件名))
对于迭代器中的i:
将打开的(self.\u文件[i])作为f:
对于f中的行:
如果在行中输入self.\uuu:
self.\u结果[self.\u文件名[i]]=行
打破
f、 关闭()
返回self.\u结果
类SearchFileHandle(webapp2.RequestHandler):
def post(自我):
userInput=str(self.request.get('input'))
self.response.out.write(page.pageChange(userInput))
search=SearchFile(用户输入)
tramText=CropText()
对于键,搜索.outPutData()中的值。iteritems():
keyBold=“%s
”%(键) keyLink=”“%(键,键,键粗体) self.response.out.write(键链接) #打印>>sys.stderr,“==>”,重新搜索(regex,value,re.IGNORECASE) resultContain=tramText.tram(值,用户输入) 对于resultContain.split(“”)中的单词: 如果用户输入中有word: 对于userInput.split(“”)中的关键字: 如果word==关键字: self.response.out.write(“%s”%(word)) 其他: self.response.out.write(“%s”%(word)) self.response.out.write(“


”) 新闻 对于键,news.websiteRead(userInput.iteritems()中的值: keyBold=“%s
”%(键) keyLink=”“%(值,keyBold) self.response.out.write(键链接) self.response.out.write(“


”) googleSearch=WebSearch(用户输入) results=googleSearch.returnResult() 对于结果中的res: self.response.out.write(res) self.response.out.write(“


”) 类CropText(): def tram(自我、文本、文字): regex=r“(.*?”+re.escape(word)+r“(.*?\)” #打印>>sys.stderr,文本 如果重新搜索(regex、text、re.IGNORECASE): 返回re.search(regex,text,re.IGNORECASE).group() 其他: 返回“” 类TakeNews(): 定义初始化(自): 赛尔夫http://www.bloomberg.com' self.\uuu topNews='' self.\uuu topNewsTitle='' def设置网站(自我,网站): 如果(网站[:10]!='http://www)而不是('http://www"网址": 网站http://www“+网站 self.\uuu网站=网站 def websiteRead(自我、用户输入): webpage=urlopen(self.\uu网站).read()
pathFinderTopNewsTitle=re.compile(“将bs4模块添加到app的文件夹中

请发布错误的完整回溯。您不能在app engine上使用
os.walk
。@aschmid00实际上这部分代码正在工作。os.walk用于本地文档搜索。错误消息是:from xgoogle.search导入GoogleSearch,SearchError导入错误:没有名为xgoogle.sea的模块rch您的代码中没有提到
xgoogle
。请用错误的完整回溯更新问题。@aschmid00已更新。谢谢you@aschmid00我发现我没有将模块添加到应用程序的文件夹中