• # j'utilise plutôt mechanize et beautifulsoup un exemple

    Posté par (site web personnel) . En réponse au message Authentification HTTP. Évalué à 2.

    Un extrait de code (largement améliorable...) qui marchait il n'y a pas longtemps (le site est en maintenance aujourd'hui)


    # -*- coding: utf-8 -*-
    import smtplib
    import mechanize, cookielib, re, sys
    from optparse import OptionParser

    from urllib2 import HTTPError, URLError
    import urllib, socket
    import BeautifulSoup

    def stat(date, verbose):
    br = mechanize.Browser()
    if verbose:
    br.set_debug_redirects(True)
    br.set_debug_http(True)
    br.addheaders = [ ('User-agent', 'Firefox') ]
    try:
    br.open("http://blogiwi.com")

    #except URLError, res:(site en maintenance)
    # email['Subject']='probleme lors de la connexion sur http://hydro.blogiwi.com'

    except IOError, e:
    send('x@gmail.com','x@gmail.com')
    if hasattr(e, 'reason'):
    print 'Nous avons échoué à joindre le serveur.'
    print 'Raison: ', e.reason
    elif hasattr(e, 'code'):
    print 'Le serveur n\'a pu satisfaire la demande.'
    print 'Code d\' erreur : ', e.code

    # print res.code, res.msg
    # print res.read()
    br.select_form(nr=0)
    br["pseudo"] = "hydro"
    br["mdp"] = "motdepassedehydro"
    try:
    response1 = br.submit()
    except HTTPError, res:
    email['Subject']='probleme lors de la connexion avec le couple user pass '
    send('x@gmail.com','x@gmail.com')
    print res.code, res.msg
    print res.read()
    content = response1.read()
    try:
    response2 = br.follow_link(text='Gestion')
    except HTTPError, res:
    email['Subject']='probleme lors de la connexion sur le lien Gestion'
    send('x@gmail','x@gmail.com')
    print res.code, res.msg
    print res.read()

    # ...







    html = response5.read()
    s = BeautifulSoup.BeautifulSoup(html)
    for tr in s.fetch('tr')[1:]:
    # print t
    td = tr.fetch('td')[0]
    if td.string is None:
    cg=td.childGenerator()
    cg.next()
    print cg.next().string[2:-1]
    else:
    print td.string
    response5.close()

    def main():
    timeout = 30
    socket.setdefaulttimeout(timeout)

    cookiejar = cookielib.CookieJar()

    parser = OptionParser()
    parser.add_option("-f", "--file", dest="filename",
    help="write report to FILE", metavar="FILE")
    parser.add_option("-d", "--date", dest="date",
    help="report for this day")
    parser.add_option("-t", "--timeout", dest="timeout",type="int",default=30,
    help="socket timeout in seconds")
    parser.add_option("-q", "--quiet",
    action="store_false", dest="quiet", default=True,
    help="don't print status messages to stdout")
    parser.add_option("-v", "--verbose",
    action="store_true", dest="verbose", default=False,
    help="make lots of noise [default]")


    (options, args) = parser.parse_args()
    filename = options.filename
    date = options.date
    verbose = options.verbose
    quiet = options.quiet
    timeout = options.timeout

    print ' date vaut : ',date
    print ' verbose vaut : ',verbose
    print ' timeout vaut : ',timeout


    stat(date, verbose)

    if __name__ == '__main__':
    main()

    ウィズコロナ