【发布时间】:2016-01-05 15:11:47
【问题描述】:
我正在使用脚本从 HTML 页面(通过邮件发送给我)获取下载链接,然后下载文件,该脚本已经运行了大约 6 个月,但上周我开始收到“403 错误”。
根据我的阅读和理解,问题是该网站阻止了我,认为它是一个机器人(不能否认),但我没有抓取该网站的 HTML 代码,只是在尝试使用requests.get 下载文件时,我只从一个特定站点收到此错误,其他站点我可以正常下载。
我尝试设置headers={'User-Agent': 'Mozilla/5.0'},但没有帮助。
这是下载文件的函数:
def download_file(dl_url, local_save_path):
"""Download URL to given path"""
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
auth_check = requests.get(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
dnl_sum = 1024
local_filename = dl_url.split('/')[-1]
complete_name = os.path.join(local_save_path, local_filename)
# Get file size
r = requests.head(dl_url, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
try:
dl_file_size = int(r.headers['content-length'])
file_size.set(str(int(int(r.headers['content-length']) * (10 ** -6))) + "MB")
c = 1
except KeyError:
c = 0
pass
# NOTE the stream=True parameter
print('1')
r = requests.get(dl_url, stream=True, auth=(username.get(), password.get()), verify=False, headers={'User-Agent': user_agent})
print('2')
while True:
try:
with open(complete_name, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
if c == 1:
download_perc.set(percentage(dl_file_size, dnl_sum))
elif c == 0:
print(dnl_sum)
dnl_sum = os.path.getsize(complete_name)
except FileNotFoundError:
continue
break
return
【问题讨论】:
-
好的,你已经知道你被屏蔽了。您对我们有什么期望?我们无权解除对您的阻止。您应该意识到任何其他行为都可能是非法的。
-
我怀疑它是基于 IP 的块,所以也许查找一些代理服务...
-
我第二个怪胎。此外,您的 user_agent 看起来很安静。
-
如果我手动下载文件(即单击邮件中的链接或在浏览器中输入 URL)我没有收到任何错误,所以我不认为我被阻止了,这也是是我们公司的内部网站,所以我不担心有任何违法行为。
-
@AlexZel 然后问问你的公司为什么他们突然开始回复 403。他们应该解除对你的阻止(是的,你被阻止了,这正是 403 的意思)。它将比代理请求更快、更容易和更可靠。
标签: python python-3.x python-requests python-3.4