2016-06-16 11 views
-1

Ich versuche, von der <span class= ''> zu verschrotten. Der Code sieht wie folgt auf den Seiten Ich Verschrottung:BeautifulSoup Scrapping Span Class HTML

< span class = "catnum"> Disc Number </span> 
    "1" 
    <br> 
    < span class = "catnum"> Track Number </span> 
    "1" 
    < br> 
    < span class = "catnum" > Duration < /span> 
    "5:28" 
    <br> 

Was ich brauche, sind die Zahlen nach dem </span> Tag zu bekommen. Ich sollte auch erwähnen, dass ich ein größeres Stück Code schreibe, das 1200 Seiten verschrottet und dabei über 1200 Seiten durchlaufen muss, wo sich die Zahlen in den Anführungszeichen von Seite zu Seite ändern.

habe ich versucht, diesen Code als Test auf einer Seite:

from bs4 import BeautifulSoup 

    soup = BeautifulSoup (open("Smith.html"), "html.parser") 

    for tag in soup.findAll('span'): 
     if tag.has_key('class'): 
      if tag['class'] == 'catnum': 
       print tag.string 

Ich weiß, dass all ‚span class‘ Tags gedruckt werden und nicht nur die drei, die ich will, aber ich dachte, dass ich es noch testen würde um zu sehen, ob es funktioniert hat und ich habe diesen Fehler:

/Library/Python/2.7/site-packages/bs4/element.py:1527: UserWarning: has_key is deprecated. Use has_attr("class") instead. key))

+0

'[span.next_sibling.strip() für Spanne in soup.select ("span.catnum")]' –

Antwort

0

wie in der Fehlermeldung sagt, sollten Sie tag.has_attr("class") anstelle der veralteten tag.has_key("class") Methode verwenden.

Ich hoffe, es hilft.

Simone

+0

tat Fahrt des Fehlers, aber jetzt nichts druckt so, ich weiß nicht, ob es das Richtige geschnappt hat. Das andere Problem, das ich habe, ist, brauche ich die Zahlen in den Zitaten und nicht den Text. –

+0

Ich weiß, aber Sie haben den Grund des Fehlers gefragt und ich habe diese Frage beantwortet. Ich verstehe den Grund für den Daumen nicht. –

+0

Wie auch immer, das Problem ist, dass'tag ['class'] 'den Klassennamen in der Form' [u'catnum '] 'zurückgibt, also müssen Sie nach dieser bestimmten Zeichenfolge suchen oder prüfen, ob sie die Zeichenfolge enthält Auf der Suche nach. für Tag in soup.findAll ('Spanne'): \t wenn tag.has_attr ('Klasse'): wenn 'catnum' in tag [ 'class']: \t \t Druck tag.string hier ein Arbeitsbeispiel. –

0

Sie können Ihre Suche nach Attribut {'class': 'catnum'} und der Text in text=re.compile('Disc Number') beschränken. Dann .next_sibling, um den Text zu finden:

from bs4 import BeautifulSoup 
import re 
s = ''' 
    <span class = "catnum"> Disc Number </span> 
    "1" 
    <br/> 
    <span class = "catnum"> Track Number </span> 
    "1" 
    <br/> 
    <span class = "catnum"> Duration </span> 
    "5:28" 
    <br/>''' 

soup = BeautifulSoup(s, 'html.parser') 
span = soup.find('span', {'class': 'catnum'}, text=re.compile(r'Disc Number')) 
print span.next_sibling