在Python中通过下载按钮执行下载

在Python中通过下载按钮执行下载,python,csv,beautifulsoup,python-requests,Python,Csv,Beautifulsoup,Python Requests,在从网站获取数据方面,我是个新手 例如,我有一个网站,有一个隐藏的donwload按钮,如下图中红色所示: 主要的问题是如何在python中下载它?我尝试了一些在网上找到的东西(例如,漂亮的汤、刮痧等等),但不知怎的失败了。 数据下载链接的结构如下所示: > Kurse als CSV-Datei </h3> <div class="clearfloat"></div> </div> > <form action="

在从网站获取数据方面,我是个新手

例如,我有一个网站,有一个隐藏的donwload按钮,如下图中红色所示:

主要的问题是如何在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"
Kurse als CSV Datei >name=“histcsv”>type=“hidden”name=“boerse_id”value=“6”/>name=“clean_split”value=“1”/>name=“clean_bezug”value=“1”/value=“1”/value=“EUR”/>
  • for=“minTime”>von:value=“8.2.2016”style=“width:71px”/>
  • for=“maxTime”>bis:value=“8.2.2017”style=“width:71px”/>
  • for=“trenner”>Trennzeichen:value=“;”style=“width:25px”/>
  • name=“go”value=“Download”type=“submit”/>
    • >id=“foot”class=“noprint”>class=“footer absand”>href=“/fehlermeldung/index.m?ag=291&;referer=&;ssl=0&;url=%2adidas aktie%2fistorische\u kurse%3Fboerse\u id%3D6%26货币%3dur%26清洁分割%3D1%26清洁支出%3D1%26清洁bezug%3D1%26min\u时间%3D2014-09-01%26max\u时间%3D2017-02-07%2Fwkn\u历史记录
      我建议您使用无需额外努力即可执行javascript的地方。您也可以使用无头浏览器。

      您可以通过此get API获得下载响应

      这里的
      min\u time
      max\u 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)
      
      您可以使用chrome开发工具监控网络,当您单击下载时,浏览器使用
      GET
      方法向服务器发送消息,您可以使用
      请求模拟它
      

      如何在url中查找参数:

      您可以解析页面并获取所需的参数,然后构建下载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)
      
      如何获取参数:

      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)
      

      谢谢。有没有可能自动读出一些东西,比如secu=291&BOERSEU_id=6,而不是手动读取?此外,我可以将csv文件直接写入数据帧吗?不知何故,chrome开发工具中的GetAPI也为我提供了不同的链接。谢谢你的回答。我仍在苦苦思索如何构造和轻松自动读取安全IDperfect非常感谢!这就是我要找的。非常感谢你的帮助。非常感谢。我使用了与上面相同的注释:是否可以自动读出一些内容,比如secu=291&BOERSEU_id=6,而不是手动执行?此外,我可以将csv文件直接写入数据帧吗?不知何故,chrome开发工具中的GetAPI也为我提供了不同的链接。