2016-05-30 5 views
1

Ich versuche, einen BeautifulSoup4 Webscrap-Code auf einer Website zu testen. Habe das meiste davon gemacht, aber eine Attributinformation aufgrund ihrer Lage ist für mich etwas schwierig zu erreichen.Kann den Tag 'rel' nicht über beautifulsoup webscrapping python

-Code lautet wie folgt:

span class="callseller-description-icon"> 
<a id="phone-lead" class="callseller-description-link" rel="0501365082" href="#">Show Phone Number</a> 

ich dies versuchen, aber nicht sicher, ob seine Ordnung

try: 
     phone=soup.find('a',{'id':'phone-lead'}) 
     for a in phone: 
      phone_result= str(a.get_text('rel').strip().encode("utf-8")) 
     print "Phone information:", phone_result 
    except StandardError as e: 
     phone_result="Error was {0}".format(e) 
     print phone_result 

Was vielleicht mein Fehler ist. Es irgendwie schwer die rel Informationen zu erhalten, die Telefonnummern

Der Fehler immer i m hat, ist

NavigableString object has no attribute get_text 
+0

Welche Ausgabe erhalten Sie? Sind Sie sicher, dass '# phone-lead' nicht von JavaScript eingegeben wird? – HyderA

+0

Fehler war 'NavigableString' Objekt hat kein Attribut 'get_text' – Panetta

+0

'.find()' gibt ein Element zurück, warum iterieren Sie es? – HyderA

Antwort

2

find kehrt das Element nicht eine Liste, wenn Sie alle a Tags wollen, verwenden Sie die find_all Methode. Um das rel Attribut zu erhalten, müssen Sie auch die .get() Methode oder Wörterbuchsuche verwenden. Sie können auch rel=True hinzufügen, um nur diejenigen "a" -Tags mit dem Attribut "rel" zu erhalten.

Demo:

  • Mit find()

    >>> soup.find('a', {'id': 'phone-lead', 'rel': True}).get('rel') 
    ['0501365082'] 
    
  • Mit find_all:

    >>> for a in soup.find_all('a', {'id':'phone-lead', 'rel': True}): 
    ...  print(a['rel']) 
    ... 
    ['0501365082'] 
    

Um eine Liste aller "rel" erhalten Sie eine Liste verwenden können co mprehensions

>>> [rel for rel in a['rel'] for a in soup.find_all('a', {'id':'phone-lead', 'rel': True})] 
['0501365082'] 
+0

Es scheint, als ob es mehr als 6 Ergebnisse für diesen bestimmten Tag gibt. Kann ich alles mit einem Komma verketten? weil ich es in einem Feld in der Datenbank – Panetta

+0

@Panetta speichern muss, verwenden Sie ['str.join'] (https://docs.python.org/3.5/library/stdtypes.html?highlight=str.join#str.join) – styvane

Verwandte Themen