2016-12-20 4 views
0
import requests 
from bs4 import BeautifulSoup 

url = 'https://www.brightscope.com/401k-rating/240370/Abengoa-Bioenergy-Company-Llc/244317/Abengoa-Bioenergy-Us-401K-Savings-Plan/' 
thepage = requests.get(url) 
urlsoup = BeautifulSoup(thepage.text, "html.parser") 

plandata = urlsoup.find(class_="plans-section").text 

print(plandata) 

I;. Versuche nur die Klasse der Bewertungszahl zu kratzen, aber wenn ich diesen Code verwenden, ich habe nichts zurück :(Python und beautifulsoup - Scrape Text

  1. Wie kratzen ich nur die Klasse von Bewertungszahl?
  2. Wie konnte ich mehrere Klassen (dies ist der wichtigste Teil) und legte sie in eine Liste das ist lesbar?

Mein Gedanke wäre Schleife jede Seite abgeschabt und hängen sie sie kratzen eine CSV-Datei mit einer neuen Zeile.

Beispiel unten;

Rating #1, Company Name1, etc, etc, etc 

Rating #2, Company Name2, etc, etc, etc 

Ich komme einfach nicht über den Buckel, dies herauszufinden. Danke für jede Hilfe!

Bearbeiten - Die Klasse "Pläne-Abschnitt" enthält die Daten, die ich will, aber es scheint zu zwei Div-Tags unter es aufgeteilt werden. Ich möchte die Daten in der Klasse "Daten-Text überdurchschnittlich" abkratzen. Das Problem ist, dass jede Seite nur den gleichen "Daten-Text" hat und was nach den Änderungen auf jedem Abschnitt/Seite kommt. Welche Möglichkeiten gibt es für mich?

+0

Die URL, die Sie angegeben haben, enthält keine Klasse = 'Daten-Text über dem Durchschnitt' –

+0

Sie haben Recht. Ich habe gerade die URL aktualisiert und es hat den'Data-Text der Klasse überdurchschnittlich ', aber ich möchte wirklich jede Klasse, die "Data-Text *" hat kratzen, ich habe den Stern hinzugefügt, um irgendeinen Text hinter "Data-Text" zu ersetzen. –

Antwort

1
import requests 
from bs4 import BeautifulSoup 


url = 'https://www.brightscope.com/401k-rating/141759/Aj-Kirkwood-Associates-Inc/143902/Aj-Kirkwood-Associates-Inc-401K-Profit-Sharing-Plan/' 
thepage = requests.get(url) 
urlsoup = BeautifulSoup(thepage.text, "html.parser") 

rate = urlsoup.find(class_='rating-number').text 
name = urlsoup.find(class_="name").text 
print(rate, name) 

aus:

59 A.J. Kirkwood & Associates, Inc. 

Verwendung re Filter alle die Klassen enthalten bestimmten Text entsprechen:

If you pass in a regular expression object, Beautiful Soup will filter against that regular expression using its search() method. 

in Ihnen Fall:

import re 
soup.find_all(class_=re.compile(r'data-text.+')) 
+0

'Importanforderungen von BS4 Import BeautifulSoup url =' https://www.brightscope.com/401k-rating/141759/Aj-Kirkwood-Associates-Inc/143902/Aj-Kirkwood-Associates-Inc-401K -Profit-Sharing-Plan/' thepage = requests.get (url) urlsoup = BeautifulSoup (thepage.text, "html.parser") plandata = urlsoup.find (Klasse _ = "Pläne-Abschnitt"). Text print (plandata) ' –

+0

Ich versuche, Daten von dieser Website zu kratzen, die zwischen den einzelnen Seiten wechseln wird. Der obige 'Code' sollte das zeigen. Die Daten, die ich will, ist unter "Design –

+1

Bitte aktualisieren Sie die Frage, und ich werde meine Antwort zu aktualisieren. –

1

Was möchten Sie gerade aus der Seite herausholen? Wenn Sie div nach Klasse suchen, sollte dies helfen.

urlsoup.findAll("div", { "class" :"rating-number"}) 
Verwandte Themen