python - 通过 Python 中的下载按钮执行下载

标签 python csv beautifulsoup python-requests

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

我有,例如一个网站http://www.ariva.de/adidas-aktie/historische_kurse并且有一个隐藏的下载按钮,如下图红色所示:

enter image description here

主要问题是如何在 python 中下载它?我尝试了一些在网上找到的东西(例如漂亮的汤、scraperwiki 等)但不知何故失败了。 数据下载链接结构如下:

> 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"

最佳答案

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)

你可以使用 chrome 开发工具监控网络,当你点击下载时,浏览器使用 GET 方法向服务器发送消息,你可以使用 requests 来模拟它 enter image description here

如何在url中查找参数: enter image description here

您可以解析页面并获取您需要的参数,然后构建下载url并将其传递给pandas。

使用 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)

关于python - 通过 Python 中的下载按钮执行下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42113041/

相关文章:

python - BeautifulSoup 当img src有../..时如何获取url?

python - 抓取的内容与我在浏览器检查器中看到的不同 - Python scraper with Selenium

python - 为 MySQL View 创建模型并加入它

python - 在 Python 中搜索 html 文件中的特定单词

python - 跨程序 session 保存复杂 Python 数据结构的最佳方式(pickle、json、xml、数据库等)

sqlite - 将 csv 导入 sqlite(firefox 附加组件)+TypeError : gFile. 内容为空

python - 如果有相同的主列名称,则减去数据框行

c - 从具有结构数组的 CSV 文件中读取

Java OutputStreamWriter UTF-16 CVS StartLine 上的错误字符

python - BeautifulSoup:如何选择特定标签