2016-06-09 2 views
1

Я пытаюсь получить количество членов команды из каждой команды в списке, прямо сейчас я получаю все ссылки в команде, но вместо получения всех ссылок, которые я хочу получить ссылки на команды с не менее чем 5 членами команды. Как я могу это сделать? Я пытался, но пока ничего не получилось.Попытка отобразить текст с веб-сайта с использованием красивого супа

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

Что вы хотите если есть вопрос «4 (Ожидание: 1)» (не уверен, что это может произойти)? – alecxe

+0

Я бы просто хотел отклонить его, если есть какие-либо ожидания. Это должна быть составленная команда из 5 или продолжить – DJRodrigue

+0

Хорошо, обновленная именно этой логикой в ​​коде. – alecxe

ответ

1

Найдите Members: метку, которая идет дальше в дереве после ссылки команды. Затем, получить значение членов команды, преобразовать в целое и проверить, если он составляет менее 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'] 

Обратите внимание, что это потерпит неудачу в случае, если есть 1 (Pending: 1) вместо целого значения. В зависимости от того, хотите ли вы подсчитать ожидающих членов команды или нет, может возникнуть другая логическая обработка.

Например, если вы не хотите, чтобы рассчитывать в ожидании членов команды, мы можем просто разделить пробелом и получить первый элемент, игнорируя то, что находится внутри «до»:

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]) 
    # ... 
Смежные вопросы