【发布时间】:2022-01-21 15:53:28
【问题描述】:
我有一个要使用 Python 下载的 .xlsx 文件。如果我单击以下 URL https://www.science.org/doi/suppl/10.1126/science.aad0501/suppl_file/aad0501_table_s5.xlsx,它会自动下载它而不会出现任何问题。但是,下面的代码
import requests
url = "https://www.science.org/doi/suppl/10.1126/science.aad0501/suppl_file/aad0501_table_s5.xlsx"
with open("this_is_a_test.xlsx", "wb") as f:
r = requests.get(url)
f.write(r.content)
print(r.ok)
输出 True 并下载 HTML 页面而不是 xlsx 文件。更令人沮丧的是,相同的代码之前运行得非常好,但由于某种原因在过去 24 小时内改变了它的行为。
This thread 和 this thread 讨论了类似的问题,但是在这两种情况下都存在登录障碍,在我的情况下不存在。
编辑 1:执行上面的代码并在我的终端中输入 head this_is_a_test.xlsx 后,这是我得到的输出:
<!DOCTYPE html>
<html lang="en" class="pb-page" data-request-id="fe043004-5c5a-4d2e-a323-cc9b39aa3339"><head data-pb-dropzone="head"><meta name="pbContext" content=";wgroup:string:Publication Websites;page:string:Cookie Absent;website:website:aaas-site" />
<script>AAASdataLayer={"page":{"pageInfo":{"pageTitle":"","pageURL":"https://www.science.org/action/cookieAbsent"},"attributes":{}},"user":{}};if(AAASdataLayer&&AAASdataLayer.user){let match=document.cookie&&document.cookie.match(/(?:^|; )consent=([^;]*)/);if(match){let jsonObj=JSON.parse(decodeURIComponent(match[1]));AAASdataLayer.user.cookieConsent=jsonObj.Marketing?'true':'false';}}</script> <link type="text/css" rel="stylesheet" href="/pb-assets/css/local-1639500397097.css">
<title>AAAS</title>
<meta charset="UTF-8">
<meta name="robots" content="noarchive,noindex,nofollow" />
<meta property="og:title" content="AAAS" />
<meta property="og:type" content="Website" />
<meta property="og:site_name" content="AAAS" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1, user-scalable=0" />
编辑 2:好的,显然代码在执行一次时会下载 Excel 文件,但在第二次执行时会改变行为。手动下载(通过单击链接)仍然有效。那么,我想可能还有一种解决方法?
【问题讨论】:
-
代码在我的情况下工作正常
-
您是否尝试过再次执行它?
-
也适用于我,在 Excel 文件中打开,其中包含所有正确的详细信息,如单元格 A1 表 S5。细胞周期基因集。
-
好的,第二次运行它,我收到一个html页面。可能在服务器上实施了一些措施以避免从同一个 ip 进行多次下载
-
您可以尝试设置User-Agent,但没有保证。该网站可能有更复杂的规则。 stackoverflow.com/questions/27652543/…
标签: python python-requests download