1

Ich bin an einem Projekt arbeiten, so weit zu kratzen und analysieren Daten aus Kalifornien Lotterie in ein dataframekratzen Daten in Datenrahmen mit BeautifulSoup

Hier ist mein Code, erzeugt er keinen Fehler aber auch keine Ausgabe:

import requests 
from bs4 import BeautifulSoup as bs4 

draw = 'http://www.calottery.com/play/draw-games/superlotto-plus/winning-numbers/?page=1' 
page = requests.get(draw) 
soup = bs4(page.text) 

drawing_list = [] 

for table_row in soup.select("table.tag_even_numbers tr"): 
    cells = table_row.findAll('td') 

    if len(cells) > 0: 
     draw_date = cells[0].text.strip() 
     numbers = cells[1].text.strip() 
     mega = cells[2].text.strip() 

     drawings = {'dates': draw_date, 'winning_numbers': numbers, 'mega_number': mega} 
     drawing_list.append(drawings) 
     print "added {0} {1} {2}, to the list".format(draw_date, numbers, mega) 

Erwartete Ausgabe: Ich würde gerne die Tabellenzeilen in einen dataframe

draw_date | numbers  | mega 
-----------|----------------|----- 
12/06/2017 | 12 24 07 01 02 | 23 
12/02/2017 | 33 18 07 42 40 | 7 

Vielen Dank für jede Revision oder Hilfe in die richtige Richtung kratzen.

Antwort

1

Dieser Ausdruck "table.tag_even_numbers tr" wählt nichts aus, da die Tabelle keine 'tag_even_numbers'-Klasse hat, aber eine' tag_even'-Klasse und eine 'numbers'-Klasse hat.

Also, wenn Sie dies ändern:

soup.select("table.tag_even_numbers tr") 

zu:

Sie 20 Artikel in drawing_list haben sollte.

Wenn Sie .text verwenden, um numbers auszuwählen, werden alle Zahlen in einer Zeichenfolge nebeneinander angezeigt.
Wenn Sie eine Liste von Zahlen wollen, sollten Sie .stripped_strings stattdessen verwenden, zB:

numbers = list(cells[1].stripped_strings) 

Dann können Sie einen Datenrahmen von drawing_list erstellen, zB:

df = pd.DataFrame(drawing_list) 
print(df.head()) 

    dates mega_number  winning_numbers 
0 Dec 6, 2017 - 3201   23 [12, 24, 07, 01, 02] 
1 Dec 2, 2017 - 3200   7 [33, 18, 07, 42, 40] 
2 Nov 29, 2017 - 3199   6 [03, 33, 26, 27, 07] 
3 Nov 25, 2017 - 3198   19 [21, 46, 13, 25, 17] 
4 Nov 22, 2017 - 3197   3 [32, 40, 27, 42, 08] 
+0

Dank viel . und der Vorschlag von 'striped_strings' erspart mir einen zusätzlichen Schritt der Teilung der Saite. sehr hilfreich. irgendwelche Vorschläge für die Übertragung in einen Datenrahmen? – emmanueledu

+0

Ich denke, es ist fertig, nur ein df –

+0

Vielen Dank. – emmanueledu

Verwandte Themen