【问题标题】:How to download data from Jotform using python?如何使用 python 从 Jotform 下载数据?
【发布时间】:2020-11-22 23:32:13
【问题描述】:

我正在从jotform收集一些调查数据,我的数据包括录音,表格中音频的URL是

'https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav'

如果我尝试使用 python 下载此文件,则会出错,因为用户只有登录 Jotform 帐户才能下载此文件。

如果在浏览器中登录很容易,我正在使用谷歌云并尝试从终端访问此文件。

我查看了他们的official API,上次更新是在 6 年前那个 repo 上。

我正在尝试使用请求访问,我试过了

import requests

s = requests.Session()
s.post('https://www.jotform.com/login/', data={'username': 'dummy_username', 'password': 'dummy_password'})

s.get( 'https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav')

但它给出了<Response [404]> 错误。

我检查了用户名和密码字段:

我是否使用当前字段作为用户名和密码?

我也尝试使用 mechanize 但它给出了同样的错误:

import mechanize

import http.cookiejar as cookielib

browser = mechanize.Browser()

cookiejar = cookielib.LWPCookieJar() 
browser.set_cookiejar( cookiejar ) 


browser.open('https://www.jotform.com/login/')
browser.select_form(nr = 0)

browser.form['username'] = 'dummy_username'
browser.form['password'] = 'dummy_password'
result = browser.submit()
browser.retrieve('https://www.jotform.com/widget-uploads/voiceRecorder/201374133/981221_121.wav')

如何使用请求模块下载音频文件?

【问题讨论】:

标签: python api python-requests mechanize jotform


【解决方案1】:

实际上您没有正确使用表单数据。 input 元素的name 用于标识它。在您的情况下,它们是 loPasswordloUsername。所以你想要做的是:

import requests 
sess = requests.Session()

payload = {
    'loPassword': 'dummy_password',
    'loUsername`' : 'dummy_username',
}
op = sess.post('https://www.jotform.com/login/',data=payload)

op.status_code

编辑:我还在网站上看到了一个 csrf 令牌。你必须先从网站上抓取一个 csrftoken,然后在你的 payload 中使用它。

from bs4 import BeautifulSoup
import requests
page = requests.get('https://www.jotform.com/login/')
soup = BeautifulSoup(page.text,'lxml') 
csrf = soup.find('input',{'name':'csrf-token'})['value']
#now create the payload with this csrftoken
payload = {
    'csrf-token':csrf,
    'loUsername':'dummy_username',
    'loPassword':'dummy_password',
}
sess = requests.Session()
op = sess.post('https://www.jotform.com/login/',data=payload)
op.status_code

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多