2017-01-03 20 views
2

私はこのウェブサイトhttps://www.cashbackforex.com/en-US/tools/economic-impacts.aspxのテーブルからPythonを使用してデータを取得する必要があります。 私が書いたコードは、これまで複数の入力を持つPythonでWebページをスクラップ

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) 

ですが、私はプログラムを実行するたびに、私は、テーブル内の値を見つけることができません。私はプログラムがサーバーに入力値を送信しないと思いますが、わかりません。

次の表:

enter image description here

+0

あなたが何を要求模倣しようとしている?私が赤い "Apply"ボタンをクリックすると、ブラウザ開発ツールの 'economic-impacts.aspx'へのPOSTは表示されません。 – alecxe

+0

変数を変更すると、米ドル、米国のNonfarm Payrollの変更が適用されます下。その下の「イベント履歴」という表が変更されます。 そのテーブルを抽出する必要があります。しかし、私がBeautifulSoupでそのテーブルを読むと、それらの行は存在しません。 –

答えて

2

私が提供ページをチェックして、そこに必要はSession()ではありませんし、必要なテーブルを取得するために複数のパラメータを送信することがわかりました。 instパラメータ(フィルタの識別子のようなもの)とtimezoneを指定するだけです。例えば、USD/US Change in NonFarm Payrollsinstについては、10332295であり、timezone(UTC) Coordinated Universal Timeであり、3である。

だからあなたの要求が

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

のようなものでなければなりません。そして、あなたは便利な方法でresponseを解析することができ、例えば:

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")]) 
... 

出力:

['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

あなたの答えをありがとう。あなたのコードは部分的に動作しますが、すべてのドロップダウンリストを調べるプログラムが必要です。だから私はそれらのすべてを得ることができます。たとえば、AUD銀行休日 - ANZACの日から終わりまでのすべてのイベントをAUDから検索する必要があります。 "https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx"はどのように見つかりましたか? –

+0

'Apply'ボタンをクリックすると、チャートに表示されるデータの' https:// www.cashbackforex.com/DesktopModules/Chart/Candles.ashx'という3つの 'GET'リクエストを送信します。' https://www.cashbackforex .com/DesktopModules/Chart/SameTimeReports.ashx'、第2の( 'Event History')テーブルの' https:// www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx'を参照してください。 – Andersson

+0

'AUD'-'AU Bank Holiday-ANZAC'のような'イベントファインダー 'の各組は独自の' inst'パラメータを持っていますが、 'AUD'ペアにどのような範囲の' inst'値を適用すべきかはわかりません彼らは連続していないようです... – Andersson

関連する問題