Python请求:检查URL是否不是HTML网页

Python请求:检查URL是否不是HTML网页,python,python-requests,Python,Python Requests,所以我有一个爬虫程序,它使用这样的东西: #if ".mp3" in baseUrl[0] or ".pdf" in baseUrl[0]: if baseUrl[0][-4] == "." and ".htm" not in baseUrl[0]: raise Exception html = requests.get(baseUrl[0], timeout=3).text 这很有效。发生的情况是,如果.mp4或.m4a之类的文件进入爬虫程序而不是HTML页面,那么脚本将挂起,在li

所以我有一个爬虫程序,它使用这样的东西:

#if ".mp3" in baseUrl[0] or ".pdf" in baseUrl[0]:
if baseUrl[0][-4] == "." and ".htm" not in baseUrl[0]:
    raise Exception
html = requests.get(baseUrl[0], timeout=3).text
这很有效。发生的情况是,如果.mp4或.m4a之类的文件进入爬虫程序而不是HTML页面,那么脚本将挂起,在linux中,当我尝试运行脚本时,它将只打印:

Killed

是否有更有效的方法捕获这些非HTML页面?

您可以发送head请求并检查内容类型。如果是文本/html,则仅继续

r = requests.head(url)
if "text/html" in r.headers["content-type"]:
    html = requests.get(url).text
else:
    print "non html page"
如果你只想提出一个请求

r = requests.get(url)
if "text/html" in r.headers["content-type"]:    
    html = r.text
else:
    print "non html page"

谢谢该head请求是否占用大量带宽或时间?现在每个请求所需的时间应该增加一倍,对吗?为了提高效率,是否需要将此合并到一个web请求中?由于服务器不返回消息正文,因此头请求应该很快。它只返回元信息。是的,它可以合并成一个。requests.get(url)也返回相同的头。您也可以在那里检查内容类型。更新了答案。太棒了!我是否应该在操作符中使用
,而不是
==
,因为有些网站会返回更多信息,如:
'text/html;字符集=utf-8'
?是的,应该使用in