gpt4 book ai didi

AWS 上的 Python 网络抓取脚本在 1.5 小时/获取 10,000 个 xml 后一直失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:59 25 4
gpt4 key购买 nike

我编写了一个从 AWS 实例运行的 Python 脚本,并从 S3 服务器获取 xml 文件以放置在实例上的文件夹中。该脚本工作正常,除了大约一个半小时后,或者大约在获取 10,000-15,000 个 xml 所需的时间之后,我收到以下错误:

HTTP Error 500: Internal Server Error

出现此错误后,我被告知无法找到我告诉脚本放置获取的 xml 的文件夹,即

[Errno 2] No such file or directory:

我尝试过从 ssh、使用屏幕和使用 nohup 运行这个脚本,但我每次都遇到同样的问题。因为我有大约 200,000 个 xml 需要获取,所以我只想运行这个脚本一次,然后在它需要运行的 20 多个小时内做其他事情。

作为引用,我写的脚本如下:

import os

import feather

df = feather.read_dataframe('avail.feather')

import xmltodict

urls = df['URL']

import urllib.request
import time
import requests

ticker=0
start = time.time()
for u in urls[ticker:len(urls)]:
#os.chdir('/home/stan/Documents/Dissertation Idea Box/IRS_Data')
ticker += 1
print("Starting URL",ticker, "of", len(urls),"........." ,(ticker/len(urls))*100, "percent done")
if u is None:
print("NO FILING")
end = time.time()
m, s = divmod(end-start, 60)
h, m = divmod(m, 60)
print("Elapsed Time:","%02d:%02d:%02d" % (h, m, s))
continue

u = u.replace('https','http')
r = requests.get(u)
doc = xmltodict.parse(r.content)
try:
os.chdir("irs990s")
urllib.request.urlretrieve(u, u.replace('http://s3.amazonaws.com/irs-form-990/',''))
print("FETCHED!","..........",u)
except Exception as e:
print("ERROR!!!","..........",u)
print(e)
end = time.time()
m, s = divmod(end-start, 60)
h, m = divmod(m, 60)
print("Elapsed Time:","%02d:%02d:%02d" % (h, m, s))
continue
end = time.time()
m, s = divmod(end-start, 60)
h, m = divmod(m, 60)
print("Elapsed Time:","%02d:%02d:%02d" % (h, m, s))
os.chdir('..')

最佳答案

我对 python 一无所知,但问题似乎很明显,都是一样的。

当S3错误发生时,你 continue ,它会跳过最近循环中的其余指令,并从循环顶部继续下一个值...这会跳过 os.chdir('..')在循环结束时,所以你当前的工作目录仍然是 irs990s .在下一次迭代中,os.chdir("irs990s")当然会失败,因为它试图找到一个名为 irs990s 的目录当时的目录中,当然已经是irs990s , 所以那当然会失败。

这里有几个教训。

不要使用 os.chdir('..') 不断地进出目录-- 这是非常糟糕的形式,容易出现细微的错误。举个例子,见上文。使用绝对路径。如果你真的想要相对路径,那很好,但不要这样做。在启动时捕获工作目录或配置基本工作目录,并使用它通过 chdir 完全限定您的路径。

设计您的代码以预测来自 S3 或来自任何提供商的任何 Web 服务的偶然错误,并在短暂的递增延迟后重试 5XX 错误 -- exponential backoff .

关于AWS 上的 Python 网络抓取脚本在 1.5 小时/获取 10,000 个 xml 后一直失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com