Erro de importação: nenhum nome de módulo urllib2

468

Aqui está o meu código:

import urllib2.request

response = urllib2.urlopen("http://www.google.com")
html = response.read()
print(html)

Qualquer ajuda?

ivanleoncz
fonte
4
Vejo você editou sua resposta novamente, então eu editei a minha resposta novamente para responder: o seu problema atual é que você está dizendo urllib.urlopen("http://www.google.com/")em vez de apenasurlopen("http://www.google.com/")
Eli Courtwright

Respostas:

631

Conforme declarado na urllib2documentação :

O urllib2módulo foi dividido em vários módulos no Python 3 com o nome urllib.requeste urllib.error. A 2to3ferramenta adaptará automaticamente as importações ao converter suas fontes em Python 3.

Então você deveria estar dizendo

from urllib.request import urlopen
html = urlopen("http://www.google.com/").read()
print(html)

Seu exemplo de código atual, agora editado, está incorreto porque você está dizendo em urllib.urlopen("http://www.google.com/")vez de apenas urlopen("http://www.google.com/").

Eli Courtwright
fonte
1
Ainda recebendo um erro, consulte editar. Edit: Ainda está recebendo um erro ao usar a partir de urllib.request
7
@Sergio: É urllib.requeste não urllib2.request. A urllibe urllib2módulos a partir do Python 2.x foram combinadas no urllibmódulo em Python 3.
Eli Courtwright
1
Isso funcionou para mim. Obrigado Eli. No entanto, estou recebendo um erro de tempo limite ao tentar acessar um URL. Também não consigo executar ping no google.com. Parece que minha rede está usando proxy.
Vaibhav
Woo, volte a compatibilidade!
User2589273 24/01
104

Para um script que trabalha com Python 2 (versões testadas 2.7.3 e 2.6.8) e Python 3 (3.2.3 e 3.3.2+), tente:

#! /usr/bin/env python

try:
    # For Python 3.0 and later
    from urllib.request import urlopen
except ImportError:
    # Fall back to Python 2's urllib2
    from urllib2 import urlopen

html = urlopen("http://www.google.com/")
print(html.read())
Uwe Kleine-König
fonte
65

O exemplo acima não funcionou para mim no 3.3. Tente isso em vez disso (YMMV, etc)

import urllib.request
url = "http://www.google.com/"
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
print (response.read().decode('utf-8'))
keithl8041
fonte
24

Algumas conclusões de guia para mostrar o conteúdo dos pacotes no Python 2 vs Python 3.

No Python 2:

In [1]: import urllib

In [2]: urllib.
urllib.ContentTooShortError      urllib.ftpwrapper                urllib.socket                    urllib.test1
urllib.FancyURLopener            urllib.getproxies                urllib.splitattr                 urllib.thishost
urllib.MAXFTPCACHE               urllib.getproxies_environment    urllib.splithost                 urllib.time
urllib.URLopener                 urllib.i                         urllib.splitnport                urllib.toBytes
urllib.addbase                   urllib.localhost                 urllib.splitpasswd               urllib.unquote
urllib.addclosehook              urllib.noheaders                 urllib.splitport                 urllib.unquote_plus
urllib.addinfo                   urllib.os                        urllib.splitquery                urllib.unwrap
urllib.addinfourl                urllib.pathname2url              urllib.splittag                  urllib.url2pathname
urllib.always_safe               urllib.proxy_bypass              urllib.splittype                 urllib.urlcleanup
urllib.base64                    urllib.proxy_bypass_environment  urllib.splituser                 urllib.urlencode
urllib.basejoin                  urllib.quote                     urllib.splitvalue                urllib.urlopen
urllib.c                         urllib.quote_plus                urllib.ssl                       urllib.urlretrieve
urllib.ftpcache                  urllib.re                        urllib.string                    
urllib.ftperrors                 urllib.reporthook                urllib.sys  

No Python 3:

In [2]: import urllib.
urllib.error        urllib.parse        urllib.request      urllib.response     urllib.robotparser

In [2]: import urllib.error.
urllib.error.ContentTooShortError  urllib.error.HTTPError             urllib.error.URLError

In [2]: import urllib.parse.
urllib.parse.parse_qs          urllib.parse.quote_plus        urllib.parse.urldefrag         urllib.parse.urlsplit
urllib.parse.parse_qsl         urllib.parse.unquote           urllib.parse.urlencode         urllib.parse.urlunparse
urllib.parse.quote             urllib.parse.unquote_plus      urllib.parse.urljoin           urllib.parse.urlunsplit
urllib.parse.quote_from_bytes  urllib.parse.unquote_to_bytes  urllib.parse.urlparse

In [2]: import urllib.request.
urllib.request.AbstractBasicAuthHandler         urllib.request.HTTPSHandler
urllib.request.AbstractDigestAuthHandler        urllib.request.OpenerDirector
urllib.request.BaseHandler                      urllib.request.ProxyBasicAuthHandler
urllib.request.CacheFTPHandler                  urllib.request.ProxyDigestAuthHandler
urllib.request.DataHandler                      urllib.request.ProxyHandler
urllib.request.FTPHandler                       urllib.request.Request
urllib.request.FancyURLopener                   urllib.request.URLopener
urllib.request.FileHandler                      urllib.request.UnknownHandler
urllib.request.HTTPBasicAuthHandler             urllib.request.build_opener
urllib.request.HTTPCookieProcessor              urllib.request.getproxies
urllib.request.HTTPDefaultErrorHandler          urllib.request.install_opener
urllib.request.HTTPDigestAuthHandler            urllib.request.pathname2url
urllib.request.HTTPErrorProcessor               urllib.request.url2pathname
urllib.request.HTTPHandler                      urllib.request.urlcleanup
urllib.request.HTTPPasswordMgr                  urllib.request.urlopen
urllib.request.HTTPPasswordMgrWithDefaultRealm  urllib.request.urlretrieve
urllib.request.HTTPRedirectHandler     


In [2]: import urllib.response.
urllib.response.addbase       urllib.response.addclosehook  urllib.response.addinfo       urllib.response.addinfourl
cs01
fonte
21

Python 3:

import urllib.request

wp = urllib.request.urlopen("http://google.com")
pw = wp.read()
print(pw)

Python 2:

import urllib
import sys

wp = urllib.urlopen("http://google.com")
for line in wp:
    sys.stdout.write(line)

Enquanto eu testei os dois códigos nas respectivas versões.

Shivam Kotwalia
fonte
8

Mais simples de todas as soluções:

No Python 3.x:

import urllib.request
url = "https://api.github.com/users?since=100"
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
data_content = response.read()
print(data_content)
Gil Baggio
fonte
6

No python 3, para obter saída de texto:

import io
import urllib.request

response = urllib.request.urlopen("http://google.com")
text = io.TextIOWrapper(response)
James Wierzba
fonte
5

Isso funcionou para mim em python3:

import urllib.request
htmlfile = urllib.request.urlopen("http://google.com")
htmltext = htmlfile.read()
print(htmltext)

fonte