我正在使用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()
但我认为这种方法效率不高。
有什么想法吗?
答案 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()