用Python脚本进行Google搜索

34

有没有人能帮我写一个Python脚本,搜索谷歌并打印出前几个结果的链接。


12
我相信有人能够做到。你目前写了什么? - jball
你需要什么样的帮助?是针对初学者的教程吗?还是想了解如何使用Python进行网页抓取 - jball
@jball 我还没有编写代码。我是Python的新手。我已经学习了Python编程的基本结构。因此,为了实现谷歌搜索,您能建议我从哪里开始吗?需要使用哪些模块? - sudh
8个回答

34

http://www.geeksforgeeks.org/performing-google-search-using-python-code/ - GorvGoyl
这对我有用,除了使用tld='...'键始终导致“连接被拒绝”错误。要搜索精确短语,您可以将其用双引号括起来,就像普通的Google搜索一样。 - user1142217

25

也许,像这样的代码?

import urllib
import json as m_json
query = raw_input('查询:')
query = urllib.urlencode({'q': query})
response = urllib.urlopen('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&' + query).read()
json = m_json.loads(response)
results = json['responseData']['results']
for result in results:
    title = result['title']
    url = result['url']  # 原始代码中是URL,导致出现名称错误异常
    print(title + '; ' + url)

阅读文档http://docs.python.org/

[编辑]由于AJAX API已经停用,您可以使用第三方服务,例如SerpApi,他们提供Python库


1
这只返回五个结果吗? - user567879
13
该API已不再提供。我们需要使用https://developers.google.com/custom-search/。 - vishnu viswanath

1

正如@Zloy Smiertniy所指出的,答案可以在这里找到。

然而,如果您正在使用Python 3,那么raw_inputurllib的语法已经发生了变化,需要对response进行解码。因此,对于Python 3,可以使用以下代码:

import urllib
import urllib.request
import json
url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&"
query = input("Query:")
query = urllib.parse.urlencode( {'q' : query } )
response = urllib.request.urlopen (url + query ).read()
data = json.loads ( response.decode() )
results = data [ 'responseData' ] [ 'results' ]
for result in results:
    title = result['title']
    url = result['url']
    print ( title + '; ' + url )

在Python3中,我遇到了这个错误:“'module' object has no attribute 'parse'”。 - Mansoor Akram
嗯...奇怪。根据https://docs.python.org/3/library/urllib.html,它应该在那里。我注意到在重新运行脚本后,我不得不添加`import urllib.request(现在在更新的答案中),所以也许import urllib.parse可以帮助你。还要注意,在重新运行脚本后,我遇到了获取response输出的问题,所以url`可能已经自上次使用脚本以来发生了变化。祝你好运。 - Løiten
此 API 已不再提供,替代方案是 google-custom-search - ands

1

建议使用Google APIs较好,但也有一个非常丑陋的版本(可替代使用Google API),如果需要的话可以对内容进行过滤。

import os, urllib, sys
filename = 'http://www.google.com/search?' + urllib.urlencode({'q': ' '.join(sys.argv[1:]) })
cmd = os.popen("lynx -dump %s" % filename)
output = cmd.read()
cmd.close()
print output

它将打印出浏览器在谷歌搜索某些内容时应该显示的内容


有趣的是“lynx -dump” - mt3
我通常使用正则表达式模块 re 来“转储”网页源代码,以防万一不能使用 Linux。 - heltonbiker

0

请尝试以下方法:

import webbrowser
lib = input()
url = "https://www.google.co.in/search?q=" +(str(lib))+ "&oq="+(str(lib))+"&gs_l=serp.12..0i71l8.0.0.0.6391.0.0.0.0.0.0.0.0..0.0....0...1c..64.serp..0.0.0.UiQhpfaBsuU"
webbrowser.open_new(url)

这并没有回答楼主的问题。它只是在浏览器窗口中打开页面(即使楼主要求使用Python脚本),并且它没有打印出结果(链接)。 - ands

-3

我是 Python 的新手。只是我的一个简单想法要进行谷歌搜索。

import webbrowser
lib=raw_input("Enter what you want to search for:")
ur="https://www.google.co.in/gfe_rd=cr&ei=Q7nZVqSBIMSL8QeBpbOoDQ#q="
webbrowser.open_new(ur+lib)

2
这实际上并没有做被要求的事情;它通过打开浏览器窗口执行了一个谷歌搜索,但是Python代码从未接收到搜索结果以显示(或以其他方式操作)。 - Mogsdad

-3
我使用了SERP API来完成这个任务。
指令非常简单:
pip install google-search-results

使用方法如下:

from lib.google_search_results import GoogleSearchResults
query = GoogleSearchResults({"q": "coffee"})
json_results = query.get_json()

更高级的用法在Github上。


-7
from pygoogle import pygoogle
g = pygoogle('quake 3 arena')
g.pages = 5
print '*Found %s results*'%(g.get_result_count())
g.get_urls()

9
兄弟,你刚才是从pygoogle复制粘贴过来的,但它已经不能用了。另外,你也没有提供任何解释。 - reticentroot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接