Partage
  • Partager sur Facebook
  • Partager sur Twitter

Code source complet (avec le code javascript)

    30 décembre 2014 à 0:40:13

    Bonsoir,

    Je programme actuellement une fonction pour récupérer les liens directs des résultats de Google Image. Cependant, j'ai un problème car la méthode que j'emploie nécessite d'ouvrir une fenêtre Firefox. En fait, pour arriver à capturer les liens directs vers les images, il me faut le code source de la page avec les résultats (comme si je faisais un clic droit -> afficher code source, sur la page), c'est-à-dire le code qui contient toutes les infos de la page (y compris les données javascript).

    Or si j'utilise le module requests par exemple pour récupérer le code source du lien, je n'ai pas ces infos javascript, juste la page en brute et je n'arrive à rien.

    Voici le script que j'ai écrit pour le moment et qui, peut-être, servira à quelqu'un.

    from selenium import webdriver
    import re, requests
    
    def exists(path):
        r = requests.get(path)
        return r.status_code == 200
    
    def getImagesFromGoogle(keywords, width, height, resultSize = 10, checkIfExist = True):
        keywords = "{} jpg OR jpeg".format(keywords).replace(" ", "+")
        urlSearch = "https://www.google.fr/search?q={}&tbm=isch&tbs=isz:ex,iszw:{},iszh:{}".format(keywords, width, height)
        driver = webdriver.Firefox()
        driver.get(urlSearch)
        results = []
        elements = driver.find_elements_by_class_name("rg_l")
        resultSize = min(resultSize, len(elements))
        pattern = '^http\:\/\/www\.google\.fr\/imgres\?imgurl\=(.*?)\.jpg'
        k = 0
        while k < resultSize:
            rawUrl = elements[k].get_attribute("href")
            reSearch = re.search(pattern, rawUrl)
            if reSearch != None:
                result = reSearch.group(1) + ".jpg"
                if checkIfExist:
                    if exists(result):
                        results.append(result)
                else:
                    results.append(result)
            k += 1
        driver.close()
        return results
    

    Je pense qu'il faut une autre librairie pour faire ce que je veux faire.

    Merci d'avance.

    Bonne soirée

    -
    Edité par periaz 30 décembre 2014 à 12:46:35

    • Partager sur Facebook
    • Partager sur Twitter

    Code source complet (avec le code javascript)

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown