我正在编写一个脚本来 DL 来自各个节目主持人的 BBC 播客的整个集合。我的脚本使用 BS4、Mechanize 和 wget。
我想知道如何测试对 URL 的请求是否会从服务器产生“404”响应代码。我写了以下函数:
def getResponseCode(br, url):
print("Opening: " + url)
try:
response = br.open(url)
print("Response code: " + str(response.code))
return True
except (mechanize.HTTPError, mechanize.URLError) as e:
if isinstance(e,mechanize.HTTPError):
print("Mechanize error: " + str(e.code))
else:
print("Mechanize error: " + str(e.reason.args))
return False
我将我的Browser()
对象和一个 URL 字符串传递给它。它返回True
或者False
取决于响应是“404”还是“200”(实际上,如果它不是“200”,则 Mechanize 抛出和异常,因此是异常处理)。
在main()
我基本上循环遍历这个函数,从我用 BS4 抓取的 URL 列表中传入一些 URL。当函数返回时,True
我继续下载 MP3 文件wget
。
然而。我的问题是:
- URL 是远程服务器上播客 MP3 文件的直接路径,我注意到当 URL 可用时,
br.open(<URL>)
会挂起。我怀疑这是因为 Mechanize 正在从服务器缓存/下载实际数据。我不想要这个,因为如果响应代码是“200”,我只想返回 True。我怎样才能不缓存/DL 而只是测试响应代码?
我尝试过使用,br.open_novisit(url, data=None)
但挂起仍然存在......