避免使用Python Urlopen中的可下载文件

时间:2016-06-12 06:08:44

标签: python urllib

我正在使用python构建一个Web爬虫。但urlopen(url)下载页面中的文件。我只想阅读html,如果url指向可下载的文件,则跳过。

我尝试过使用超时

urlopen(url, timeout = 5).read()

这样可以避免使用大文件,但这似乎不起作用。

我还想制作一个常见文件扩展名列表,并在网址以扩展名结尾时跳过网址。

flag = False
extensions = ['.zip', '.mp3',....]
for extension in extensions:
    if url.endswith(extension):
        flag = True
        continue
if not flag:
    x = urlopen(url).read()

但我认为这种方法效率不高。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用Content-Type HTTP标头查看HTML或其他内容:

x= urlopen(url)
if 'text/html' in x.headers.get('Content-Type'):
    x= x.read()

答案 1 :(得分:1)

您可以通过python requests

来实现这一目标
In [8]: import requests

In [9]: h = requests.head("http://stackoverflow.com/questions/37771237/avoid-downloadable-files-in-python-urlopen")

In [10]: if "text/html" in h.headers["content-type"]:
   ....:     content = requests.get("http://stackoverflow.com/questions/37771237/avoid-downloadable-files-in-python-urlopen").text
   ....:     

答案 2 :(得分:0)

要缩小要检查的文件内容量,请在检查文件内容之前检查retcode

doc = urllib.urlopen(url, timeout=5)
if doc and doc.getCode() == 200 and doc.headers.get('Content-Type').startswith("text/html"):
    x = doc.read()