我正在使用用户名和密码访问网址以下载csv,并在今天的日期保存文件,页面上只有一个下载链接。
有什么方法可以通过python实现这个任务
我正在使用下面的脚本我看到了打印输出。但是如何下载网页上的 download csv 按钮。通常,当我点击下载csv按钮时,它要求我保存文件。
import re
import requests
from bs4 import BeautifulSoup
url = 'https://url.com'
login_data = dict(login='user@example.com', password='password-g')
session = requests.session()
link = 'https://url.com'
r = requests.get(link)
soup = BeautifulSoup(r.text, "html.parser")
for i in soup.find_all('a', {'class': "app-btn-down"}):
print(re.search('http://.*\b_file', i.get('href')).group(0)) # the CSV file name is b_file
print ("r.text")
由于我是python的新手,所以请原谅我的错误解释。
答案 0 :(得分:1)
这主要是伪代码,因为我不知道html数据,但我想你会理解。
首先,您必须提交数据以在会话中获取必要的Cookie(您可以使用s.cookies
检查Cookie)。请注意,除login
和password
之外,您可能需要提交更多字段。将此会话用于您的所有请求。
然后你可以得到bs4
的csv链接,假设它不是由js生成的,否则你可能不得不使用selenium
。
import requests
from bs4 import BeautifulSoup
from time import gmtime, strftime
import os
s = requests.session()
url = 'https://url.com'
login_data = dict(login='user@example.com', password='password-g')
s.post(url, data=login_data)
link = 'https://url.com'
r = s.get(link)
soup = BeautifulSoup(r.text, "html.parser")
csv_link = soup.find('a', {'class':'app-btn-down', 'href':lambda h:'b_file' in h})['href']
csv_file = s.get(csv_link).text
最后,您可以使用gmtime
获取日期和时间,并使用strftime
对其进行格式化。
date_time = strftime("%Y-%m-%d_%H-%M-%S", gmtime())
path = os.path.join('/some/dir', date_time)
with open(path, 'w') as f:
f.write(csv_file)