2017-02-21 3 views
1

Ich bin ein Anfänger Python (3) Benutzer und ich versuche derzeit einige Sport Statistiken für meine Fantasy-Football-Saison zu kratzen. Zuvor habe ich das auf runde Weise gemacht (Download in HT-Track, Konvertierung in Excel und Verwendung von VBA, um meine Daten zu kombinieren). Aber jetzt versuche ich Python zu lernen, um meine Programmierfähigkeiten zu verbessern.Python - Anfänger Scraping mit schöner Suppe 4 - onmouseover

Ich möchte this page kratzen, aber in einige Schwierigkeiten bei der Auswahl nur die Zeilen/Tabellen, die ich will. Hier ist, wie mein Code derzeit steht. Es hat immer noch ein bisschen Code, wo ich versucht habe damit herumzuspielen.

from urllib.request import urlopen # import the library 
from bs4 import BeautifulSoup # Import BS 
from bs4 import SoupStrainer # Import Soup Strainer 

page = urlopen('http://www.footywire.com/afl/footy/ft_match_statistics?mid=6172') # access the website 
only_tables = SoupStrainer('table') # parse only table elements when parsing 
soup = BeautifulSoup(page, 'html.parser') # parse the html 


# for row in soup('table',{'class':'tbody'}[0].tbody('tr')): 
# tds = row('td') 
# print (tds[0].string, tds[1].string) 

# create variables to keep the data in 

team = [] 
player = [] 
kicks = [] 
handballs = [] 
disposals = [] 
marks = [] 
goals = [] 
tackles = [] 
hitouts = [] 
inside50s = [] 
freesfor = [] 
freesagainst = [] 
fantasy = [] 
supercoach = [] 

table = soup.find_all('tr') 


# print(soup.prettify()) 

print(table) 

Im Moment kann ich alle auswählen ‚tr‘ von der Seite, aber Mühe, die ich habe nur die Zeilen ausgewählt werden, die das folgende Attribut haben:

<tr bgcolor="#ffffff" onmouseout="this.bgColor='#ffffff';" onmouseover="this.bgColor='#cbcdd0';"> 

„onmouseover“ scheint der zu sein, Nur Attribut, das für die Tabelle, die ich abkratzen möchte, allgemein/einzigartig ist.

Weiß jemand, wie ich diese Codezeile ändern kann, um dieses Attribut auszuwählen?

table = soup.find_all('tr') 

Von hier bin ich zuversichtlich, dass ich die Daten in einem Datenrahmen platzieren können, die hoffentlich kann ich in CSV exportieren.

Jede Hilfe würde sehr geschätzt werden, da ich die BS4-Dokumentation ohne Glück durchgesehen habe.

Antwort

1

Wie bereits erläutert auf der BeautifulSoup documentation

Sie können diese verwenden:

table = soup.findAll("tr", {"bgcolor": "#ffffff", "onmouseout": "this.bgColor='#ffffff'", "onmouseover": "this.bgColor='#cbcdd0';"}) 

Mehr können Sie auch den folgenden Ansatz verwenden:

tr_tag = soup.findAll(lambda tag:tag.name == "tr" and tag["bgcolor"] == "#ffffff") and tag["onmouseout"] = "this.bgColor='#ffffff'" and tag["onmouseover"] = "this.bgColor='#cbcdd0';" 

Der Vorteil des obigen Ansatzes ist, dass er die volle Leistung von BS nutzt und Ihnen das Ergebnis in einer sehr optimierten Weise gibt

+0

Vielen Dank für Ihre Hilfe, ich sehe jetzt, was ich falsch gemacht habe mit der Attrs Sektion. – MSalty

0

prüfen this:

soup.find_all("tr", attrs={"onmouseover" : "this.bgColor='#cbcdd0';"}) 
+0

Vielen Dank (und @Dex 'ter)! Ich schwöre, ich habe ähnliche Dinge versucht, aber es hat nie für mich funktioniert. – MSalty