【发布时间】: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 中时无效。
【问题讨论】:
标签: python-3.x csv beautifulsoup python-requests