1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#!/usr/bin/python
# -*- coding: ISO-8859-15 -*-
import re
import sys
import os.path
import urllib
import urllib2
import cookielib
#=================================================================
# gestion des cookies et install d'un opener
# est utile pour gerer les cookies de session par exemple
#qu'on pourra zyeuter car on les sauve sur le disk
COOKIEFILE = 'cookies.lwp'
cj = None
urlopen = urllib2.urlopen
Request = urllib2.Request
cj = cookielib.LWPCookieJar()
if cj is not None:
if os.path.isfile(COOKIEFILE):
# si nous avons un fichier cookie déjà sauvegardé
# alors charger les cookies dans le Cookie Jar
cj.load(COOKIEFILE)
# Maintenant nous avons besoin d'avoir notre Cookie Jar
# installé dans l'opener;
# pour chercher des URLs
if cookielib is not None:
# nous appelons HTTPCookieProcessor
# et installons l'opener dans urllib2
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
#================================================================
# on fait croire au site qu'on visite qu'on est un navigateur
# on va modifier le header de la requête HTTP
# sinon on peut se faire jeter car on s'annonce avec python.urllib
headers={'User-agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT'}
#==============================================================
#expressions regulieres
r_link='<a class=l href="(.*?)"'
#google range les liens principaux sous cet forme '<a class=l href="?????
#voir autre class pour les autres types de liens du style cache etc...
search_link=re.compile(r_link)
#page de google sur laquelle on veut chercher
g_page="http://google.fr/search?q="
#=============================================================
# définition de quelques fonctions utiles
#
def write_page(fichier,mode,txt):
""" write page loaded on file system """
try:
f = open(fichier, mode)
f.write(txt)
f.close()
finally:
# finally is always called
# then we are sure file is closed
f.close()
def get_page(url,headers,post=None):
""" Load page , do and encode post if needed """
try:
if post is not None:
#encode request post
post = urllib.urlencode(post)
req = Request(url, post, headers)
handle = urlopen(req)
except IOError, e:
#print code and reason if error
print _('We failed to open '), url
if hasattr(e, 'code'):
print _('We failed with error code - '),e.code
elif hasattr(e, 'reason'):
print _("The error object has the following 'reason' attribute :")
print e.reason
print _("This usually means the server doesn't exist,")
print _("is down, or we don't have an internet connection.")
sys.exit()
else:
page= handle.read()
handle.close()#closed object like a file, memory now is free
if cj is not None:
# save the cookies again
cj.save(COOKIEFILE)
return page
def find_exp(string,search):
""" return list found values """
found=re.findall(search,string)
return found
#===================================================================
def search_google(search):
""" extrait les liens des resultats de la premiere page
d'une recherche google et suave les pages sur le disk"""
p_results=get_page(g_page + urllib.quote(search),headers)
write_page('results.htm', 'w',p_results)
print "recherche Google"
l_results=find_exp(p_results,r_link)
i=len(l_results)
for r in l_results:
pr=get_page(r,headers)
print "sauvegarde de : " ,r
write_page('result'+str(i)+'.htm', 'w',pr)
i=i-1
print "done"
search_google("python how-to") |
Partager