gpt4 book ai didi

python - 如何在 Python 中自动填写表单数据、提交表单并下载响应 ZIP 文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:02 25 4
gpt4 key购买 nike

我正在尝试编写一个可以导航到此 page 的 Python 脚本。 ,填写表单数据,提交表单并下载自动返回的 ZIP 文件。

我需要的文件是通过在表单中​​选择Bhavcopy并提供过去的有效日期来生成的。[此处显示了示例输入和结果 2

到目前为止,我已经尝试通过复制和修改文档中的示例代码来使用 Scrapy、webbrowser、requests、Beautifulsoup、Mechanize 和 Selenium 来学习和实现多种方法,但尚未取得任何进展。

到目前为止,唯一没有错误的代码是:

import requests
from bs4 import BeautifulSoup
u = 'https://www.nseindia.com/products/content/all_daily_reports.htm'
p = requests.get(u)
soup = BeautifulSoup(p.text, 'html.parser')
for link in soup.find_all('a'):
d = requests.get(link.get('href'))
print(d)

这段代码并不完整,我不知道如何继续。从逻辑上讲,我知道我应该:

  1. 正在获取页面[完成]
  2. 选择表单元素[未完成]也许可以在Scrapy中实现
  3. 填写数据(第一个参数是常量,可以在循环中提供日期)[不知道如何以编程方式执行此操作]
  4. 提交表格[同上]
  5. 单击 a 标签即可下载 href 属性中的文件 [a request.get(在 href 值上)应该执行的操作它

任何有关我如何实现这一目标的指示将不胜感激。

该网页允许您下载名为 Bhavcopy 的每日报告,其中包含在国家证券交易所(印度)交易的所有股票的开盘价、最低价、最高价、收盘价数据,我希望积累尽可能多的历史数据.

最佳答案

如果您的目标是在提供日期后下载 zip 文件,这样就可以完成任务。

如果您检查 zip 文件元素,您可以看到 href 为 /content/historical/EQUITIES/2018/FEB/cm02FEB2018bhav.csv.zip/content/historical/EQUITIES/2017/DEC/cm06DEC2017bhav.csv.zip 根据您输入的日期。

如果您仔细查看链接,您会发现设置链接格式非常简单。因此,您的程序从访问 url、提交数据并获取 zip 文件更改为简单地格式化 url。

使用网址https://www.nseindia.com/content/historical/EQUITIES/2017/DEC/cm06DEC2017bhav.csv.zip,您可以直接下载zip文件。

import webbrowser

def download_zip(date, month, year):
url = 'https://www.nseindia.com/content/historical/EQUITIES/{2}/{1}/cm{0}{1}{2}bhav.csv.zip'.format(date, month, year)
webbrowser.open(url)

download_zip('02', 'FEB', '2018')

调用download_zip函数会直接下载zip文件。

您唯一需要注意的是参数的格式。日期格式为DD,月份为MMM,年份为YYYY。显然,如果 url 无效,这个程序就会抛出异常。处理好这个问题并使用 try/except 来处理它们。

<小时/>

如果您不希望浏览器弹出下载,您可以使用 requests 模块下载文件。

def download_zip(date, month, year):
url = 'https://www.nseindia.com/content/historical/EQUITIES/{2}/{1}/cm{0}{1}{2}bhav.csv.zip'.format(date, month, year)
r = requests.get(url)
location = 'C:/Users/username/Downloads/' # Change the location as per your OS and your needs.
filename = 'cm{}{}{}bhav.csv.zip'.format(date, month, year) # You can name this file anything you want, but with a .zip extension
with open(location + filename, 'wb') as f:
f.write(r.content)

关于python - 如何在 Python 中自动填写表单数据、提交表单并下载响应 ZIP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com