【问题标题】:Downloading a CSV that requires authentication from an email link下载需要通过电子邮件链接进行身份验证的 CSV
【发布时间】:2022-01-24 17:13:51
【问题描述】:

我是一名初级开发人员,负责从 Stripe Sigma 自动创建、下载和转换查询。

我已经完成了大部分工作:我每天都有预定的查询,这些查询会生成前 24 小时的报告,该报告与纯粹用于这些报告的虚拟帐户相关联,并且我有在这个问题的后半部分做了转换和报告。

我遇到的障碍是让此代码提取手动单击链接生成的 csv。

import re
from imbox import Imbox # pip install imbox
import traceback
import requests
from bs4 import BeautifulSoup
mail = Imbox(host, username=username, password=password, ssl=True, ssl_context=None, starttls=False)

messages = mail.messages(unread=True)
message_list = []
for (uid, message) in messages:
    body = str(message.body.get('html'))
    message_list.append(body)

mail.logout()

def get_download_link(message):
    print(message[0])
    soup = BeautifulSoup(message, 'html.parser')
    
    urls = []     
    for link in soup.find_all('a'):
        print(link.get('href'))
        urls.append(link.get('href'))
    return urls[1]
    # return urls  

dl_urls = []       
for m in message_list:
     dl_urls.append(get_download_link(m))

对于 dl_urls 中的 url: 打印(网址) 尝试: s = requests.Session() s.auth =(用户名,密码) response = s.get(url, allow_redirects=True, auth= (username, password)) # 打印(response.headers) 如果(response.status_code == requests.codes.ok): print('响应头', response.headers['content-type']) response = requests.get(url, allow_redirects=True, auth= HTTPDigestAuth(username, password)) # 打印(响应。文本) 打印(响应。内容) # open(filename, 'wb').write(response.content) 别的: print("无效状态码",response.status_code) 除了: print('url有问题', url)

我正在 jupyter 笔记本中处理此问题,我尝试仅包含相关代码,详细说明我如何进入电子邮件,如何从所述电子邮件中提取 URL,以及单击哪个会下载 csv。

一直到最后一步,我的运气非常好,但是现在,我手动单击的 URL 按预期下载了 csv,但是相同的 URL 被 python 视为条带页面的 HTML /请求。

我尝试在标题中四处寻找,另一篇文章('Content-Disposition')中建议的一个标题不存在,并且打印存在的标题占用了 20-25 行.

任何关于可能包含 csv 的标题或我将采取的其他方法的任何建议都将不胜感激。

我包含了一个(故意破坏的)URL,以显示手动下载有效的粗略格式,完全保存在 python 中时无效。

https://59.email.stripe.com/CL0/https:%2F%2Fdashboard.stripe.com%2Fscheduled_query_runs%xxxxxxxxxxxxxxxx%2Fdownload/1/xxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-000000/xxxxxxxxx-xxxxx_xxxxxxxxxxxxxxxx=233

【问题讨论】:

    标签: python-3.x csv beautifulsoup python-requests


    【解决方案1】:

    如果您使用计划查询,您可以通过webhooks 接收有关完成/可用性的通知,然后使用事件负载中包含的url 以编程方式访问文件。您也可以通过 API list/retrieve 预定查询,并在访问file link 的数据之前检查他们的status

    应该不需要从电子邮件中解析这些链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 2014-01-25
      • 1970-01-01
      • 2018-04-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多