2017-01-17 1 views
0

J'essaie d'obtenir une liste des blessures d'une équipe particulière (liverpool dans ce cas) à partir du site Web suivantGrattage à l'aide soupe Belle conduit à l'erreur que dans une section particulière (objet type_null rencontré)

http://www.physioroom.com/news/english_premier_league/epl_injury_table.php

Il fonctionne très bien avec certaines équipes (Swansea), mais sort avec les erreurs suivantes pour certains (Liverpool, everyon)

TypeError: Can't convert 'NoneType' object to str implicitly 

Voici le code que je utilise.

from bs4 import BeautifulSoup 
import urllib.request 


url = "http://www.physioroom.com/news/english_premier_league/epl_injury_table.php" 
html = urllib.request.urlopen(url).read() 
soup = BeautifulSoup(html, "html.parser") 
#lp = soup.find(alt="Liverpool away shirt").parent.parent.parent.next_sibling.next_sibling 
lp = soup.find(alt="Swansea City away shirt").parent.parent.parent.next_sibling.next_sibling 
player_info = "" 
player_list = [] 

while True: 
    if(lp.has_attr('id')): 
      break 
    else: 
      tdlist = lp.find_all('td')#  player_info = tdlist[0].string+"\t"+tdlist[1].string+"\t"+tdlist[3].string 
      #print(tdlist[0].find('a').string.strip() + "\t" + tdlist[1].string.strip() + "\t" + tdlist[3].string.strip()) 
      print(tdlist[0].string + "\t" + tdlist[1].string + "\t" + tdlist[3].string) 
      lp=lp.findNext('tr') 

S'il vous plaît laissez-moi savoir comment je peux résoudre ce problème.

+0

Je l'ai corrigé. Ça ne fait rien. Certaines étiquettes contenaient et devaient être traitées différemment. – wolfcubman

Répondre

1
from bs4 import BeautifulSoup 
import requests 


url = "http://www.physioroom.com/news/english_premier_league/epl_injury_table.php" 
r = requests.get(url) 
soup = BeautifulSoup(r.text, "lxml") 
table = soup.find('table', id='epl-table') 
for tr in table('tr', id=None): 
    print(tr.get_text('\t', strip=True)) 

sur: Méthode

PLAYER CONDITION LATEST NEWS EXPECTED RETURN AVAILABLE? 
D Meyler Knock No Return Date Slight Doubt 
S Maloney Ear Infection No Return Date Slight Doubt 
M Henriksen Shoulder Separation April 1, 2017 Major Doubt 
A McGregor Fitness No Return Date Major Doubt 
W Keane ACL Knee Injury No Return Date 
M Odubajo Patella Fracture May 1, 2017 
G Luer Knee Injury February 1, 2017 

get_text()

Si vous voulez que la partie de texte d'un document ou une étiquette, vous pouvez utiliser le get_text(). Il renvoie tout le texte dans un document ou sous une étiquette, comme une seule chaîne Unicode:

Vous pouvez spécifier une chaîne à utiliser pour joindre les bits de texte ensemble

Vous pouvez dire Beautiful Soup à dépouiller les espaces à partir du début et de la fin de chaque bit de texte

+0

Merci! Cela semble tellement plus simple que mon long chemin. Je n'ai aucune réputation pour te marquer comme réponse pour l'instant. – wolfcubman

+0

@wolfcubman http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –