2009-06-14 4 views
1

J'ai donc posé une question plus tôt sur la récupération des scores élevés d'une page html et un autre utilisateur m'a donné le code suivant pour aider. Je suis nouveau à python et à beautifulsoup donc j'essaye de passer par d'autres codes morceau par morceau. Je comprends la plus grande partie, mais je n'obtiens pas ce que ce morceau de code est et quelle est sa fonction:Que fait cette fonction en Python impliquant urllib2 et BeautifulSoup?

def parse_string(el): 
     text = ''.join(el.findAll(text=True)) 
     return text.strip() 

Voici le code entier:

from urllib2 import urlopen 
from BeautifulSoup import BeautifulSoup 
import sys 

URL = "http://hiscore.runescape.com/hiscorepersonal.ws?user1=" + sys.argv[1] 

# Grab page html, create BeatifulSoup object 
html = urlopen(URL).read() 
soup = BeautifulSoup(html) 

# Grab the <table id="mini_player"> element 
scores = soup.find('table', {'id':'mini_player'}) 

# Get a list of all the <tr>s in the table, skip the header row 
rows = scores.findAll('tr')[1:] 

# Helper function to return concatenation of all character data in an element 
def parse_string(el): 
    text = ''.join(el.findAll(text=True)) 
    return text.strip() 

for row in rows: 

    # Get all the text from the <td>s 
    data = map(parse_string, row.findAll('td')) 

    # Skip the first td, which is an image 
    data = data[1:] 

    # Do something with the data... 
    print data 

Répondre

3

el.findAll(text=True) retours tout le texte contenu dans un élément et ses sous-éléments. Par texte, je veux dire tout ce qui n'est pas dans une étiquette; donc dans <b>hello</b> alors "bonjour" serait le texte mais <b> et </b> ne serait pas. Cette fonction réunit donc tout le texte trouvé sous l'élément donné et supprime les espaces de l'avant et de l'arrière.

Voici un lien vers la documentation findAll: http://www.crummy.com/software/BeautifulSoup/documentation.html#arg-text

+0

utilisation des backticks pour HTML. :) –

+0

pourquoi est-il un '' avec rien dedans pour ouvrir le texte =? et que font les commandes et les bandes exactement? Et pourquoi cela a-t-il dû être défini comme une fonction avant d'être appliqué aux données? Merci. – Alex

+0

'' .join signifie joindre chaque élément avec une chaîne vide (il n'y a donc pas de délimiteur). – Jacob