urllib.request.urlopen return bytes, but I cannot decode it
<p>I tried parsing a web page using <code>urllib.request</code>'s <code>urlopen()</code> method, like:</p>

<pre><code>from urllib.request import Request, urlopen
req = Request(url)
html = urlopen(req).read()
</code></pre>

<p>However, the last line returned the result in bytes. </p>

<p>So I tried decoding it, like:</p>

<pre><code>html = urlopen(req).read().decode("utf-8")
</code></pre>

<p>However, the error occurred:</p>

<blockquote>
  <p>UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte.</p>
</blockquote>

<p>With some research, I found <a href="https://stackoverflow.com/questions/4981977/how-to-handle-response-encoding-from-urllib-request-urlopen">one related answer</a>, which parses <code>charset</code> to decide the decode. However, the page doesn't return the charset, and when I tried checking it on Chrome Web Inspector, the following line was written in its header:</p>

<pre><code>&lt;meta charset="utf-8"&gt;
</code></pre>

<p>So why can I not decode it with <code>utf-8</code>? And how can I parse the web page successfully?</p>

<p>The web site URL is <code>http://www.vogue.com/fashion-shows/fall-2016-menswear/fendi/slideshow/collection#2</code>, where I want to save the image to my disk.</p>

<p>Note that I use Python 3.5.1. I also note that all the work I wrote above have functioned well in my other scraping programs.</p>