我正在抓取几页请求,并遇到了一个无线电流的网址。我基本上只是想跳过它或做某种超时但请求没有结束:
u = 'http://streaming.radionomy.com/Cheche-International-Radio'
print 'started...', u
r = requests.get(u, timeout=1, stream=False)
我认为设置stream = False会这样做,不是吗?我也尝试设置标题标题['Connection'] ='close',但这也不起作用。在这两种情况下,请求都不会关闭。
谢谢!
答案 0 :(得分:2)
实际上,代码的行为符合预期,但参数并不意味着你所期望的。 timeout
是服务器开始发送响应需要多长时间的时间限制,但是您访问的服务器不需要很长时间才能开始响应...但它会发送无限响应。另一方面,stream
设置为true
(默认值)时,等待整个内容下载;再次,内容永远不会结束,所以呼叫永远不会返回(并且可能会占用你的RAM)。
我认为您需要的是使用stream=False
发出请求,查看响应HTTP标头,如果内容不是您要查找的内容,则放弃请求。例如,您可以查看Content-Type
;如果您只对text/html
响应感兴趣,则以下代码将起作用:
u = 'http://streaming.radionomy.com/Cheche-International-Radio'
print 'started...', u
r = requests.get(u, stream=True)
content_type = r.headers['Content-Type']
if content_type.startswith('text/html'):
content = r.content
# process the content
else:
print 'discarded ', u
当然,您可以选择使用其他一些条件过滤请求。对于您的示例,标题是:
{
'Expires': 'Mon, 26 Jul 1997 05:00:00 GMT',
'icy-br': '128, 128',
'Pragma': 'no-cache',
'icy-name': 'ChecheInternationalRadio',
'ice-audio-info': 'bitrate=128;samplerate=44100;channels=2',
'Cache-Control': 'no-cache',
'icy-genre': 'medellin',
'Content-Type': 'audio/mpeg',
'icy-description': 'Esta es una Emisora suena solo Exitos Una selecta programacion musical con los mejores artistas y canciones de todos los tiempos. Transmitiendo desde medellin Colombia.',
'icy-pub': '1',
'Accept-Ranges': 'none',
'icy-url': 'http://cheche-international-radio.playtheradio.com/',
'Server': 'Icecast 2.3.3-kh8'
}
其中一些是标准的,有些是Icecast特有的,请选择适合您的方式。