Я новичок в Python, и я изучал, как это сделать. Ни один из приведенных примеров не работает должным образом для меня. Некоторые из них заблокированы Google, если вы делаете много (несколько) запросов, некоторые устарели.
Анализ html-поиска Google (добавление заголовка в запрос) будет работать до тех пор, пока Google снова не изменит структуру html. Вы можете использовать ту же логику для поиска в любой другой поисковой системе, просматривая html (view-source).
import urllib2
def getgoogleurl(search,siteurl=False):
if siteurl==False:
return 'http://www.google.com/search?q='+urllib2.quote(search)
else:
return 'http://www.google.com/search?q=site:'+urllib2.quote(siteurl)+'%20'+urllib2.quote(search)
def getgooglelinks(search,siteurl=False):
#google returns 403 without user agent
headers = {'User-agent':'Mozilla/11.0'}
req = urllib2.Request(getgoogleurl(search,siteurl),None,headers)
site = urllib2.urlopen(req)
data = site.read()
site.close()
#no beatifulsoup because google html is generated with javascript
start = data.find('<div id="res">')
end = data.find('<div id="foot">')
if data[start:end]=='':
#error, no links to find
return False
else:
links =[]
data = data[start:end]
start = 0
end = 0
while start>-1 and end>-1:
#get only results of the provided site
if siteurl==False:
start = data.find('<a href="/url?q=')
else:
start = data.find('<a href="/url?q='+str(siteurl))
data = data[start+len('<a href="/url?q='):]
end = data.find('&sa=U&ei=')
if start>-1 and end>-1:
link = urllib2.unquote(data[0:end])
data = data[end:len(data)]
if link.find('http')==0:
links.append(link)
return links
Использование:
links = getgooglelinks('python','http://www.stackoverflow.com/')
for link in links:
print link
(Изменить 1: добавление параметра для сужения поиска Google для определенного сайта)
(Изменить 2: Когда я добавил этот ответ, я кодировал скрипт Python для поиска субтитров. Недавно я загрузил его на Github: Subseek )