2016-03-29 1 views
0

J'ai trouvé un analyseur html python qui construit une structure de type dom pour les sources html il semble facile à utiliser et très rapide. je suis en train d'écrire un grattoir pour codepad.org qui récupère les dix derniers messages de http://codepad.org/recentObtenir les dix derniers messages de codepad.org avec Easy Html Parser (EHP) python

Le EHP lib à https://github.com/iogf/ehp j'ai le code ci-dessous qui fonctionne.

import requests 
from ehp import Html 

def catch_refs(data): 
    html = Html() 
    dom = html.feed(data) 

    return [ind.attr['href'] 
       for ind in dom.find('a') 
        if 'view' in ind.text()] 

def retrieve_source(refs, dir): 
    """ 
    Get the source code of the posts then save in a dir. 
    """ 
    pass 


if __name__ == '__main__': 
    req = requests.get('http://codepad.org/recent') 
    refs = catch_refs(req.text) 
    retrieve_source(refs, '/tmp/') 
    print refs  

il sort:

[u'http://codepad.org/aQGNiQ6t', 
u'http://codepad.org/HMrG1q7t', 
u'http://codepad.org/zGBMaKoZ', ...] 

comme prévu, mais je ne peux pas comprendre comment télécharger le code source des fichiers.

Répondre

0

En fait, votre retrieve_source(refs, dir) ne fait rien.

Vous n'obtenez donc aucun résultat.

mise à jour en fonction de votre commentaire:

import os 


def get_code_snippet(page): 
    dom = Html().feed(page) 
    # getting all <div class=='highlight'> 
    elements = [el for el in dom.find('div') 
       if el.attr['class'] == 'highlight'] 
    return elements[1].text() 

def retrieve_source(refs, dir): 
    for i, ref in enumerate(refs): 
     with open(os.path.join(dir, str(i) + '.html'), 'w') as r: 
      r.write(get_code_snippet(requests.get(ref).content)) 
+0

ouais, mais il me donne le code html i juste besoin le code source qui a été affiché, obtenir? –

+0

hein, vous n'avez pas clarifié correctement le 'code source', donc ça ressemble au code source de la page. Pour les extraits avec code source, vous devez écrire une partie d'analyse. –