Python:避免在“页面不存在”时下载html

2024-06-16 09:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在自学webscraping,想用requests下载一堆.pgn文件(基本上是文本文件)。文件名采用日期的形式,但不严格按时间顺序排列。我在可能的日期上运行了一个循环,但是如果一个索引日期与一个文件不对应,我仍然会将filename.pgn作为一个带有错误页html的文本文件下载。相反,我想要的是跳过这些日期。你知道吗

举个例子:

如果我跑:

filename = 'games9jul18.pgn'
url = 'https://www.chesspublishing.com/p/9/jul18/'+filename
response = requests.post(url, data=payload)
with open(filename, 'wb') as e:
    e.write(response.text)

使用payload中的适当身份验证,将保存正确的文件games9jul18.pgn。但如果我跑了:

filename = 'games9aug18.pgn'
url = 'https://www.chesspublishing.com/p/9/aug18/'+filename
response = requests.post(url, data=payload)
with open(filename, 'wb') as e:
    e.write(response.text)   

我仍然得到一个保存的文件games9aug18.pgn,但是它不是一个“真正的”pgn文件,而是一个错误页html的文本文件。导航到“我的浏览器”上的错误页时,它没有错误代码,但有一大块文本您询问的页面可能已被删除,或者可能根本不存在。

不幸的是,由于日期结构不一致,不可能只在与实际文件对应的文件名上循环。如果到达错误页,如何添加不创建.pgn文件的条件?你知道吗


Tags: 文件httpsurl文件名responsehtmlwww错误
1条回答
网友
1楼 · 发布于 2024-06-16 09:48:04

您应该检查响应状态。“Page not found”是404,因此您可以检查该代码,甚至可以检查成功的请求,即200:

response = requests.post(url, data=payload)
if response.status == 200:
    with...

相关问题 更多 >