2017-05-19 4 views
2

Ich habe für eine Weile auf diese stecken geblieben ... Ich versuche, die Spielernamen und Projektion von dieser Seite zu kratzen: https://www.fantasysportsco.com/Projections/Sport/MLB/Site/DraftKings/PID/793BS4 Scraping versteckt

Das Skript in einer Schleife durch die Vergangenheit, indem Sie gerade durchlaufen wird alle PIDs sind in einem Bereich, aber das ist nicht das Problem. Das Hauptproblem ist, wenn ich das Element inspizieren finde ich den Wert in dieser Klasse gespeichert ist:

<div class="salarybox expanded"... 

, die in der fünften Position meiner projectionsView Liste befinden.

Der Schaber findet die projectionsView-Klasse in Ordnung, kann aber nichts darin finden.

Wenn ich gehe zu den eigentlichen HTML-Code der Seite sehen sie diese Inhalte scheint einfach nicht in ihr nicht exsist ..

<div id="salData" class="projectionsView"> 
    <!-- Fill in with Salary Data --> 
</div> 

Ich bin super neu zu kratzen und haben gekratzt erfolgreich alles, was ich brauche für Mein Projekt ist einfach nicht diese verdammte Seite ... Ich denke es könnte sein, weil ich mich für die Seite anmelden muss? Aber auf jeden Fall sind die Informationen sichtbar, ohne sich anzumelden, also dachte ich mir, dass ich Selen nicht benutzen müsste, und selbst wenn ich das würde, würde ich es nicht finden, denke ich nicht.

Wie auch immer, hier ist der Code, den ich bisher habe, der offensichtlich eine leere Liste zurückgibt.

from bs4 import BeautifulSoup as soup 
from urllib.request import urlopen as uReq 
import pandas as pd 
import os 


url = "https://www.fantasysportsco.com/Projections/Sport/MLB/Site/DraftKings/PID/793" 

uClient = uReq(url) 
page_read = uClient.read() 
uClient.close() 

page_soup = soup(page_read, "html.parser") 
salarybox = page_soup.findAll("div",{"class":"projectionsView"}) 
print(salarybox[4].findAll("div",{"class":"salarybox expanded"})) 

Alle Ideen würden sehr geschätzt werden!

Die ganze Idee des Skripts ist es, den ppText jeder "largehox expanded" Klasse auf jeder Seite zu finden. Ich möchte nur wissen, wie man diese Elemente findet. Vielleicht ein anderer Parser?

Antwort

1

Basierend auf Ihrer URL-Seite, die <div id="salData" class="projectionsView"> wird durch das Javascript neu schreiben, aber erhalten die gesamte Antwort vor dem Ausführen Ihres Rückrufs, bedeutet dies, dass der Javascript generierte Inhalt nicht in der Antwort sein wird. Daher wird die div leer sein:

<div id="salData" class="projectionsView"> 
    <!-- Fill in with Salary Data --> 
</div> 

Sie besser versuchen, mit selenium und splash wird für diese Art von dynamischer Website arbeiten.

BTW, nachdem Sie die richtige Antwort erhalten, Sie div von id wählen, wird es genauer sein:

salarybox = page_soup.find("div",{"id":"salData"}) 
+0

Hey danke für die Antwort! Bin dankbar. Ich hatte gehofft, ich müsste Selen nicht, aber ich denke, es wird gut. Ich werde nach dem Mittagessen einen grundlegenden Selencode aufschreiben, um zu sehen, ob ich eine Antwort bekommen kann. Noch nie von Spritzern gehört? Werde auch das untersuchen –

+1

Mutter Gottes. Selenium war sehr einfach ... Ich weiß nicht, warum ich es nicht einfach versucht habe, bevor ich gefragt habe. Danke für den Hinweis trotzdem! Ich habe es :) –

+0

@StuKruske Cool, Jubel :) –