2016-06-09 2 views
1

Ich versuche, die Anzahl der Teammitglieder von jedem Team auf der Liste zu erhalten, jetzt bekomme ich alle Team-Links, aber anstatt alle Links, die ich erhalten möchte die Links zu den Teams mit mindestens 5 Teammitgliedern. Wie würde ich das machen? Ich habe versucht, aber bisher hat noch nichts funktioniert.Versuch, Text von der Website mit schönen Suppe anzuzeigen

import time 
    import requests 
    from bs4 import BeautifulSoup 


    def get_all(url, base): 
     r = requests.get(url) 
     page = r.text 

     soup = BeautifulSoup(page, 'html.parser') 

     for team_links in soup.select('div.details h3 a'): 
      yield base + team_links['href'] 

     next_page = soup.find('div', {'class': 'pages'}).find('span', text='Next') 


     while next_page: 
      # Gives the server a break 
      time.sleep(0.2) 

      r = requests.get(BASE_URL + next_page.find_previous('a')['href']) 
      page = r.text 
      soup = BeautifulSoup(page) 
      for team_links in soup.select('div.details h3 a'): 
       yield BASE_URL + team_links['href'] 
      next_page = soup.find('div', {'class': 'pages'}).find('span', text='Next') 


    if __name__ == '__main__': 

     BASE_URL = 'http://www.gosugamers.net' 
     URL = 'http://www.gosugamers.net/counterstrike/teams' 

     for link in get_all(URL, BASE_URL): 
       print (link) 
+0

Was möchten Sie wenn es einen '4 (Pending: 1)' Fall gibt (nicht sicher, ob es passieren kann)? – alecxe

+0

Ich möchte es nur ablehnen, wenn noch etwas aussteht. Es muss ein zusammengesetztes Team von 5 oder weiter sein – DJRodrigue

+0

Okay, mit genau dieser Logik im Code aktualisiert. – alecxe

Antwort

1

Suchen Sie das Members: Label, das nach dem Team Link weiter im Baum geht. Dann die Teammitglieder Wert erhalten, konvertieren integer und prüfen, ob es weniger als 5:

for team_links in soup.select('div.details h3 a'): 
    members = int(team_links.find_next("th", text="Members:").find_next_sibling("td").text.strip()) 
    if members < 5: # skip teams with less than 5 members 
     continue 
    yield base + team_links['href'] 

Beachten Sie, dass dies im Falle fehlschlagen würde ein 1 (Pending: 1) ist anstelle eines Integer-Wert. Abhängig davon, ob Sie die ausstehenden Teammitglieder zählen möchten oder nicht, könnte dies eine andere Logik sein.

Zum Beispiel, wenn Sie keine Mitglieder anhängige Team zählen wollen, können wir nur durch Raum geteilt und das erste Element erhalten, zu ignorieren, was drin ist „offen“:

for team_links in soup.select('div.details h3 a'): 
    members = int(team_links.find_next("th", text="Members:").find_next_sibling("td").text.strip().split()[0]) 
    # ...