2017-01-03 4 views
2

Мне нужно получить данные из таблицы на этом сайте https://www.cashbackforex.com/en-US/tools/economic-impacts.aspx с помощью python. код, который я написал до сих порСкремблирование веб-страницы в python с несколькими входами

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

Что запрос вы пытаясь имитировать? Когда я нажимаю красную кнопку «Применить», я не вижу POST для «economic-impacts.aspx» в инструментах разработчика браузера. – alecxe

+0

Когда я меняю переменную, то есть USD, US Change в 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, чтобы найти все события, начиная с AU Bank Holiday - ANZAC Day до конца. Как вы нашли «https://www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx»? –

+0

Когда вы нажимаете кнопку «Применить», вы отправляете 3 'GET'-запроса:' https: // www.cashbackforex.com/DesktopModules/Chart/Candles.ashx' для данных, отображаемых на диаграмме, 'https: //www.cashbackforex .com/DesktopModules/Chart/SameTimeReports.ashx' для первой таблицы и 'https: // www.cashbackforex.com/DesktopModules/Chart/HistoricalEventFigures.ashx' для второй (' История событий') таблицы. – Andersson

+0

Каждая пара «искателей событий», таких как «AUD' -AA Bank Holiday - ANZAC», имеет свой собственный параметр «inst», но я не знаю, какой точный диапазон значений 'inst' вы должны применять для пар AUD поскольку они кажутся не последовательными ... – Andersson