2016-11-28 2 views
1

Das zurückgegebene Ergebnis ist nicht in der Reihenfolge, ich brauche das Ergebnis nacheinander zurückgegeben werden.BeautifulSoup Loop nicht in Sequenz zurückgegeben

Der Versuch, Rankings aufzunehmen.

def parse(self, response): 
    sourceHtml = BeautifulSoup(response.body) 
    soup = sourceHtml.find("dl", {"id": "resultList"}) 
    for link in soup.find_all('dd'): 
     print(link.get('code')) 

Antwort

1

Wenn Sie die gedruckte „Codes“ in einer Liste haben wollen, verwenden Sie einfach ein "list comprehension":

def parse(self, response): 
    sourceHtml = BeautifulSoup(response.body) 
    soup = sourceHtml.find("dl", {"id": "resultList"}) 
    return [link.get('code') for link in soup.find_all('dd')] 

Sie auch, wie Sie die Elemente lokalisieren verbessern können und verwenden Sie einen CSS selector:

def parse(self, response): 
    soup = BeautifulSoup(response.body) 
    return [link.get('code') for link in soup.select('dl#resultList dd')] 

Es ist auch eine gute Idee, provide an underlying parser explicitly:

soup = BeautifulSoup(response.body, "html.parser") 
# or soup = BeautifulSoup(response.body, "html5lib") 
# or soup = BeautifulSoup(response.body, "lxml")