Je vous avais déjà parlé dans un précédent article de l’ancienne fonctionnalité de Viadeo qui permettait d’extraire la liste de toutes les personnes connectées qui étaient passés sur votre site internet.
Maintenant que la fonctionnalité n’est plus disponible, je m’étais amusé à écrire ces quelques lignes de code en Python permettant d’aller chercher l’information sur toutes les pages de la fonctionnalité et d’écrire toute cette information directement dans une table dans une base de données. J’utilisais les lib mechanize (pour appeler les URL) et beautifulsoup (pour parser) En espérant que ce code inspirera d’autres développeurs….
#!/usr/bin/python
# -*- coding: utf-8 -*-
import mechanize
import MySQLdb
from bs4 import BeautifulSoup
url='http://www.viadeo.com/blogs/listeblogs/?showUrlId=0021acu8yayhxxex&pageNumber=2#blog0'
class ScrapeViadeo():
"""permet de scraper viadeo pour recuperer la liste des personnes qui
ont consulté un blog et store le tout dans une table"""
def seConnecterAViadeo(self,url,login,password):
""" pour se connecter à viadeo et aller recuperer la bonne page
avec l'affichage des personnes qui sont venues sur le site internet"""
#dans un premier temps, on se loggue
browser=mechanize.Browser()
browser.set_handle_robots(False)
browser.open(url)
browser.select_form(name="ident")
browser["email"]=login
browser["password"]=password
response=browser.submit()
#puis on va recuperer la page 1) avec les noms des personnes qui sont venues sur le site internet
self.urlStartToCrawl="http://www.viadeo.com/blogs/listeblogs/"
while 1:
url=browser.open(self.urlStartToCrawl)
self.recupererContactsOnPage(url)
def recupererContactsOnPage(self, url):
""" fonction permettant d'aller recuperer les contacts sur
une page donnee"""
soup=BeautifulSoup(url)
table=soup.find('table',{"class":"recordset"})
rows=table.findAll('tr')
db=MySQLdb.connect("localhost", "root","sdfsdf","experience")
cursor=db.cursor()
for tr in rows[1:]:
cols=[]
tede=tr.findAll('td')
for td in tede:
if td.find(text=True) is None:
text='none'
else:
chp=td.find(text=True)
text=chp.replace("'"," ")
cols.append(text)
sql="insert into CONTACT_VIADEO values('%s', '%s', '%s', '%s', '%s', '%s')" % (cols[0],cols[1],cols[2],cols[3],cols[4],cols[5])
print sql
try:
cursor.execute(sql)
db.commit()
except:
print "echec, ligne suivante!"
cursor.close()
db.close()
try:
classCss=soup.find('a', {"class":"nextPage"})
newHref=classCss.get('href')
except:
print "fin des pages - scrape over!"
if newHref is not None:
self.urlStartToCrawl="http://www.viadeo.com"+str(newHref)
return self.urlStartToCrawl
#identifiants de connexion a viadeo
urlAccueil="http://www.viadeo.com/fr/"
login="monLogin"
password="motDePasse"
scrape=ScrapeViadeo()
scrape.seConnecterAViadeo(urlAccueil,login,password)