2017-01-03 6 views
2

Ich brauche Daten aus einer Tabelle auf dieser Website https://www.cashbackforex.com/en-US/tools/economic-impacts.aspx mit Python zu bekommen. Der Code, den ich bisher geschrieben habe, istScraping einer Webseite in Python mit mehreren Eingängen

from bs4 import BeautifulSoup 
import requests 

url = 'https://www.cashbackforex.com/en-US/tools/economic-impacts.aspx' 

with requests.Session() as session: 
    session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'} 

    # parsing parameters 
    response = session.get(url) 
    soup = BeautifulSoup(response.content, "lxml") 
    print(soup.select('input[type="button"]')) 
    data = { 
     'dnn$ctr1601$Chart$ddlCurrencies': 'USD', 
     'dnn$ctr1601$Chart$ddlReports': 'US Change in NonFarm Payrolls', 
     'dnn$ctr1601$Chart$ddlTimeZone': '(UTC) Coordinated Universal Time', 
     '__EVENTTARGET': soup.find('input', {'name': '__EVENTTARGET'}).get('value', ''), 
     '__EVENTARGUMENT': soup.find('input', {'name': '__EVENTARGUMENT'}).get('value', ''), 
     '__VIEWSTATE': soup.find('input', {'name': '__VIEWSTATE'}).get('value', ''), 
     '__VIEWSTATEGENERATOR': soup.find('input', {'name': '__VIEWSTATEGENERATOR'}).get('value', ''), 
     'btnApplyTools': soup.find('input', {'id': 'btnApplyTools'}).get('value', '') 
    } 

    # parsing data 
    response = session.post(url, data=data) 

    soup = BeautifulSoup(response.content, "lxml") 
    print(soup) 

aber jedes Mal, wenn ich das Programm ausführen kann ich nicht die Werte in der Tabelle finden. Ich denke, das Programm sendet die Eingabewerte nicht an den Server, aber ich bin mir nicht sicher.

Die folgende Tabelle:

enter image description here

+0

Was Anfrage Sie sind versuchen nachzuahmen? Wenn ich auf den roten Button "Übernehmen" klicke, sehe ich in den Browser-Entwickler-Tools keinen POST zu "economic-impacts.aspx". – alecxe

+0

Wenn ich eine Variable, zB USD, ändere, ändere ich die Nonfarm Payroll und triff den Antrag Unterseite. Die Tabelle namens "Event History" darunter ändert sich. Ich muss diese Tabelle extrahieren. Aber wenn ich diese Tabelle mit BeautifulSoup lese, sind keine dieser Zeilen vorhanden. –

Antwort

2

geprüft I zur Verfügung gestellt Seite und stellte fest, dass es keine Notwendigkeit, in Session() ist und mehrere Parameter Senden erforderlich Tisch zu bekommen. Alles, was Sie brauchen, ist inst Parameter (so etwas wie Identifier des Filters) und timezone. Für USD/US Change in NonFarm Payrollsinst ist der Parameterwert beispielsweise 10332295, timezone für (UTC) Coordinated Universal Time ist 3.

So sollen Ihre Anfrage so etwas wie

params = {'inst': '10332295', 'timezone': '3'} 
response = requests.get('https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx', params=params) 

Und dann können Sie response in bequemer Weise analysieren, zB:

from xml.dom import minidom 

xml = minidom.parseString(response.text) 
print([i.childNodes[0].wholeText for i in xml.getElementsByTagName("Date")]) 
print([i.childNodes[0].wholeText for i in xml.getElementsByTagName("ReportName")]) 
... 

Der Ausgang:

['2 Dec 2016', '4 Nov 2016', '7 Oct 2016', '2 Sep 2016', '5 Aug 2016', '8 Jul 2016', '3 Jun 2016',...] 
['US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls', 'US Change in NonFarm Payrolls',...] 
+0

Danke für deine Antwort. Dein Code funktioniert teilweise, aber ich brauche das Programm, um alle Dropdown-Listen zu durchlaufen. also kann ich alle bekommen. Zum Beispiel muss es von AUD beginnen, alle Ereignisse beginnend von AU Bank Holiday - ANZAC Day bis zum Ende zu finden. Wie haben Sie die "https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx" gefunden? –

+0

Wenn Sie auf die Schaltfläche 'Anwenden' klicken, senden Sie 3 'GET'-Anfragen: 'https: // www.cashbackforex.com/DesktopModules/Chart/Candles.ashx' für Daten, die im Chart' https: //www.cashbackforex angezeigt werden .com/DesktopModules/Chart/SameTimeReports.ashx für die erste Tabelle und https: // www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx für die zweite Tabelle (Event History). – Andersson

+0

Jedes Paar 'Eventfinder' wie' AUD'-'AU Bank Holiday - ANZAC' hat seinen eigenen' inst'-Parameter, aber ich weiß nicht, welchen genauen Bereich von 'inst'-Werten man für' AUD'-Paare anwenden sollte wie sie scheinen nicht sequenziell zu sein ... – Andersson

Verwandte Themen