2017-02-08 3 views
3

Я как-то новичок в области получения данных с веб-сайта.Выполнение Загрузить через кнопку загрузки в Python

У меня есть, например. сайт http://www.ariva.de/adidas-aktie/historische_kurse и есть кнопка Donwload скрыта, как показано на рисунке ниже красным цветом:

enter image description here

Главный вопрос заключается в том, как я могу скачать, что в Python? Я попробовал некоторые вещи, найденные в Интернете (например, красивый суп, скрепервики и т. Д.), Но почему-то не удалось. Ссылка для скачивания данных структурирована следующим образом:

> Kurse als CSV-Datei  </h3> <div class="clearfloat"></div> </div> 
> <form action="/quote/historic/historic.csv" method="get" 
> name="histcsv"> <input type="hidden" name="secu" value="291" /> <input 
> type="hidden" name="boerse_id" value="6" /> <input type="hidden" 
> name="clean_split" value="1" /> <input type="hidden" 
> name="clean_payout" value="1" /> <input type="hidden" 
> name="clean_bezug" value="1" /> <input type="hidden" name="currency" 
> value="EUR" /> <ul style="margin:5px;"> <li> <label 
> for="minTime">von:</label> <input id="minTime" name="min_time" 
> value="8.2.2016" style="width:71px" /> </li> <li> <label 
> for="maxTime">bis:</label> <input id="maxTime" name="max_time" 
> value="8.2.2017" style="width:71px" /> </li> <li> <label 
> for="trenner">Trennzeichen:</label> <input id="trenner" name="trenner" 
> value=";" style="width:25px" /> </li> <li> <input class="submitButton" 
> name="go" value="Download" type="submit" /> </li> </ul> </form> </div> 
> </div> <div class="clearfloat"></div> </div> </div> </div> <div 
> id="foot" class="noprint"> <div class="adControllerAd evtAdShow 
> noprint abstand adHide" id="iqadtile16"> </div> <div id="footer"> <div 
> class="footer abstand"> <a 
> href="/adidas-aktie/historische_kurse?boerse_id=6&currency=EUR&clean_split=1&clean_payout=1&clean_bezug=1&min_time=2014-09-01&max_time=2017-02-07/wkn_A1EWWW_historic.csv" 
> class="anker"> <img src="/forum/i/up.gif" alt="" width="9" 
> height="9">Zum Seitenanfang</a> <a 
> href="/fehlermeldung/index.m?ag=291&amp;referrer=&amp;ssl=0&amp;url=%2Fadidas-aktie%2Fhistorische_kurse%3Fboerse_id%3D6%26currency%3DEUR%26clean_split%3D1%26clean_payout%3D1%26clean_bezug%3D1%26min_time%3D2014-09-01%26max_time%3D2017-02-07%2Fwkn_A1EWWW_historic.csv" 

ответ

2
import requests 

url = 'http://www.ariva.de/quote/historic/historic.csv?secu=291&boerse_id=6&clean_split=1&clean_payout=0&clean_bezug=1&min_time=8.2.2016&max_time=8.2.2017&trenner=%3B&go=Download' 
r = requests.get(url) 
with open('a.csv', 'wb') as f: 
    f.write(r.content) 

вы можете контролировать средства разработки сетевого использования хрома, а при нажатии на загрузку, использование браузера GET способ отправки сообщения на сервер, и вы можете имитировать его использовать requests enter image description here

как найти параметры в URL-адресе: enter image description here

вы можете анализировать страницы и получите требуемый параметр, затем создайте URL-адрес загрузки и передайте его в pandas.

Используйте панды считываемые из ссылки:

import pandas as pd 
pd.read_csv('http://www.ariva.de/quote/historic/historic.csv?secu=291&boerse_id=6&clean_split=1&clean_payout=0&clean_bezug=1&min_time=8.2.2016&max_time=8.2.2017&trenner=%3B&go=Download') 

Как получить параметр:

import requests, bs4 

url = 'http://www.ariva.de/adidas-aktie/historische_kurse' 
r = requests.get(url) 
soup = bs4.BeautifulSoup(r.text, 'lxml') 
payload = {field['name']:field['value'] for field in soup.select('form[name="histcsv"] input')} 
csv = requests.post('http://www.ariva.de/quote/historic/historic.csv', data=payload) 
+0

большое спасибо. Можно ли автоматически читать вещи, например secu = 291 & boerse_id = 6, вместо этого делать это вручную? Кроме того, могу ли я записать файл csv непосредственно в рамку данных pandas? Как-то и получить API в инструменте разработчика от хром выплевывает меня разные ссылки. – MCM

+0

спасибо за ответ. Я все еще борется с тем, как построить и легко скребок, чтобы автоматически считывать идентификатор безопасности – MCM

+0

. это то, что я искал. Большое спасибо за помощь. – MCM

0

Ну, я хотел бы предложить вам использовать Selenium, где вы можете выполнить JavaScript без каких-либо дополнительных усилий. Вы также можете использовать Phantom для браузера без браузера.

0

Вы можете получить ответ на загрузку через этот GET API,

http://www.ariva.de/quote/historic/historic.csv?secu=291&boerse_id=6&clean_split=1&clean_payout=0&clean_bezug=1&min_time=8.2.2016&max_time=8.2.2017&trenner=%3B&go=Download

Здесь min_time и max_time являются две Штамп даты, которые вам нужно будет предоставить, и trenner является разделитель, вы можете переписать ответ, а затем записать его в файл.

import requests 
response = requests.get('http://www.ariva.de/quote/historic/historic.csv?secu=291&boerse_id=6&clean_split=1&clean_payout=0&clean_bezug=1&min_time=8.2.2016&max_time=8.2.2017&trenner=%3B&go=Download') 

file = open('download.csv','w+') 
file.write(response.text) 
+0

спасибо большое. Я использую тот же комментарий, что и выше: возможно ли автоматически читать вещи, например secu = 291 & boerse_id = 6, вместо этого делать это вручную? Кроме того, могу ли я записать файл csv непосредственно в рамку данных pandas? Как-то и получить API в инструменте разработчика от хром выплевывает меня разные ссылки. – MCM

Смежные вопросы