Forum: PC-Programmierung Python, Beautifulsoup find all


von Robin (Gast)


Lesenswert?

Hi,

derzeit suche ich so in einer eingelesenen html
1
My_URL = BeautifulSoup(urlopen("pfad"), "html.parser")
2
                    
3
        
4
result = My_URL.find("span", {"itemprop": "name"}).get_text()

Das klappt eig. auch gut. Jetzt kommt allerdings
1
<span itemprop="name">
 mehrmals vor. Wie kann ich mir die ersten 2 auslesen und nicht nur das 
erste?

von Tom (Gast)


Lesenswert?

find_all statt find?

von Seb (Gast)


Lesenswert?

Wird nicht gehen. get_text gibt es in find_all nicht

von Planlos (Gast)


Lesenswert?

Seb schrieb:
> Wird nicht gehen. get_text gibt es in find_all nicht

Du willst ja auch nicht get_text von allen, sondern nur von den ersten 
Zwei.

Also: find_all, erste zwei wählen, get_text auf's erste, get_text auf's 
zweite anwenden.

von Robin (Gast)


Lesenswert?

Hi,

also ich habe da jetzt 2 Tage lang herumprobiert, aber ich bekomme es 
nicht hin.


1
My_URL = BeautifulSoup(urlopen("pfad"), "html.parser")                    
2
        
3
result = My_URL.findAll("span", {"itemprop": "name"})
4
print (result)
Dann bekomme ich das hier.
1
<span itemprop="name">Text1</span>, <span itemprop="name">Text2</span>, <span itemprop="name">Text3</span>
1
Aber wie bekomme ich das html in Text?
2
print (result.text)
3
4
AttributeError: 'ResultSet' object has no attribute 'text'

von Tom (Gast)


Lesenswert?

http://stackoverflow.com/a/36091352

Ohne googlen und Doku kommt man nicht weit.

von Sheeva P. (sheevaplug)


Lesenswert?

Robin schrieb:
> also ich habe da jetzt 2 Tage lang herumprobiert, aber ich bekomme es
> nicht hin.
>
>
1
> My_URL = BeautifulSoup(urlopen("pfad"), "html.parser")
2
> 
3
> result = My_URL.findAll("span", {"itemprop": "name"})
4
> print (result)
5
>
>
>
1
> Aber wie bekomme ich das html in Text?
2
> print (result.text)
3
> 
4
> AttributeError: 'ResultSet' object has no attribute 'text'
5
>

"result" ist eine Instanz der Klasse "ResultSet", das ist im Prinzip 
eine Liste von Instanzen der Klasse "bs4.element.Tag". Was Du jedoch 
willst, ist
1
results = My_URL.findAll('span')[0:2]   # man beachte das slice am Ende
2
for result in results:
3
    print result.getText()

oder für Fortgeschrittene mit List Comprehension:
1
print [a for a in My_URL.findAll('span')[0:2]]

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.