lunes, 25 de abril de 2011

Obteniendo perfiles de google dado una palabra clave

Quisiera compartir con ustedes la forma que encontré para obtener los perfiles de google, dado una palabra clave, usando web scrapping, ya que luego de una lectura minuciosa, no encuentro una dichosa API de google, que me facilite la vida… agradecería recomendaciones:

La intencion de la siguiente funcion es simular lo que hacemos en http://www.google.com/profiles?q=Reiner. Disculpen por haberla escrito en python ;-)

def search_profiles(keyword):

        """
Devuelve una lista de los perfiles encontrados, a partir de una keyword suministrada

"""
#using first name got better results
start_index = -10
scrapper = Scrapper() #[1]

list_result = []
list_uids = []
stop_loop = False
while not stop_loop:
start_index += 10
step1 = {'http://www.google.com/profiles?q=%s&start=%d' % (keyword, start_index) : None}
scrapper.go(step1)
soup = scrapper.getSoup()
elements_profiles = soup.findAll('div', {'class':'profile-result'})
if not elements_profiles:
break
for element in elements_profiles:
anchor_element = element.find('a')

url_profile = anchor_element['href']
uid = url_profile.split('/')[-1]
#mechanism to determine when stop the search[2]
if uid in list_uids:
stop_loop = True
break
else:
list_uids.append(uid)

url_profile = "http://www.google.com%s" % url_profile

src_picture = anchor_element.find('img')['src']
src_picture = "http://www.google.com%s" % src_picture

text_element = element.find('div', {'class':'profile-result-text-block'})
full_name = text_element.find('h1').text

list_result.append({
'uid' : uid,
'full_name' : full_name,
'url_public_profile' : url_profile,
'photo' : src_picture,
})

return list_result

[1]La clase Scrapper, pues contiene una implementación sencilla de un scrapper en python, que manipula el html usando la librería BeautifulSoup,

[2]Los cantidad de resultados encontrados, es un valor mal aproximado, por lo que no me sirve para saber cuándo detener la iteración y si el parámetro start es mucho mayor que los resultados reales encontrados, siempre se muestra la última pagina de resultados.

A partir del análisis anterior, tuve que emplear una lista temporal que va almacenando los id de los perfiles (únicos) para saber cuando estoy en una página que ya fue mostrada anteriormente, y así saber cuándo dejar de buscar.


Agradezco cualquier sugerencia..... animo!!!