AttributeError: объект 'module' не имеет атрибута 'urlopen'

Я пытаюсь использовать Python для загрузки исходного HTML-кода веб-сайта, но получаю эту ошибку.

Traceback (most recent call last):  
    File "C:\Users\Sergio.Tapia\Documents\NetBeansProjects\DICParser\src\WebDownload.py", line 3, in <module>
     file = urllib.urlopen("http://www.python.org")
AttributeError: 'module' object has no attribute 'urlopen'

Я следую руководству здесь: http://www.boddie.org.uk/python/HTML.html

import urllib

file = urllib.urlopen("http://www.python.org")
s = file.read()
f.close()

#I'm guessing this would output the html source code?
print(s)

Я использую Python 3.


person Community    schedule 19.10.2010    source источник


Ответы (11)


Это работает в Python 2.x.

Для Python 3 посмотрите docs :

import urllib.request

with urllib.request.urlopen("http://www.python.org") as url:
    s = url.read()
    # I'm guessing this would output the html source code ?
    print(s)
person eumiro    schedule 19.10.2010
comment
Привет, Эумиро, используя оператор «with» в Python, я предполагаю, что он автоматически закрывает соединение, как только он его использует? Похоже на оператор использования в C #? - person ; 19.10.2010
comment
@Sergio: точно! И через отступ вы видите, где ваш файл все еще открыт. - person eumiro; 19.10.2010
comment
Привет, @eumiro, у меня ошибка IndentationError: ожидался блок с отступом, когда я набираю s = url.read(). Могу я спросить, как я могу решить эту проблему? Икс - person Karen Chan; 25.03.2016
comment
@KarenChan, вам не хватает отступа перед s=url.read(); у вас есть 4 пробела перед ним? - person numbermaniac; 12.06.2017
comment
Я получаю HTTPError: HTTP Error 503: Service Unavailable, когда использую ваш метод - person Mona Jalal; 06.04.2021

Решение, совместимое с Python 2 + 3:

import sys

if sys.version_info[0] == 3:
    from urllib.request import urlopen
else:
    # Not Python 3 - today, it is most likely to be Python 2
    # But note that this might need an update when Python 4
    # might be around one day
    from urllib import urlopen


# Your code where you can use urlopen
with urlopen("http://www.python.org") as url:
    s = url.read()

print(s)
person Martin Thoma    schedule 07.12.2015
comment
with urlopen("http://www.python.org") as url: не работает в python2 с AttributeError: addinfourl instance has no attribute '__exit__'. Нужно написать url = urlopen("http://www.python.org") - person orshachar; 22.04.2018

import urllib.request as ur
s = ur.urlopen("http://www.google.com")
sl = s.read()
print(sl)

В Python v3 urllib.request является отдельным модулем, поэтому urllib здесь использовать нельзя.

person Manu Mariaraj    schedule 13.04.2015

Чтобы заставить 'dataX = urllib.urlopen (url) .read ()' работать в python 3 (это было бы правильно для python 2) вы должны просто изменить 2 мелочи.

1: Сам оператор urllib (добавьте посередине .request):

dataX = urllib.request.urlopen(url).read()

2: предшествующий ему оператор импорта (вместо import urlib замените его на:

import urllib.request

И это должно работать на python3 :)

person Steven B. Peutz    schedule 14.06.2017

Измените ДВЕ строки:

import urllib.request #line1

#Replace
urllib.urlopen("http://www.python.org")
#To
urllib.request.urlopen("http://www.python.org") #line2

Если вы получили исключение ERROR 403: Forbidden Error, попробуйте следующее:

siteurl = "http://www.python.org"

req = urllib.request.Request(siteurl, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'})
pageHTML = urllib.request.urlopen(req).read()

Надеюсь, ваша проблема решена.

person Shahzaib Chadhar    schedule 22.02.2020

Для python 3 попробуйте что-то вроде этого:

import urllib.request
urllib.request.urlretrieve('http://crcv.ucf.edu/THUMOS14/UCF101/UCF101/v_YoYo_g19_c02.avi', "video_name.avi")

Он загрузит видео в текущий рабочий каталог.

Мне помогли ЗДЕСЬ

person rocksyne    schedule 13.07.2018

Решение для python3:

from urllib.request import urlopen

url = 'http://www.python.org'
file = urlopen(url)
html = file.read()
print(html)
person Banjali    schedule 17.07.2018
comment
Просто и понятно для новичков. Спасибо - person SHR; 06.11.2018

Один из возможных способов сделать это:

import urllib
...

try:
    # Python 2
    from urllib2 import urlopen
except ImportError:
    # Python 3
    from urllib.request import urlopen
person Vasyl Lyashkevych    schedule 28.08.2019

Используйте шесть модулей, чтобы код был совместим между python2 и python3.

urllib.request.urlopen("<your-url>")```
person Rajat Shukla    schedule 19.05.2020
comment
Таким образом, вы можете импортировать шесть модулей из six.moves import urllib - person Rajat Shukla; 03.06.2020

ваш код, используемый в python2.x, вы можете использовать так:

from urllib.request import urlopen
urlopen(url)

кстати, предложите другой модуль с именем requests, более удобный в использовании, вы можете pip установить его и использовать так:

import requests
requests.get(url)
requests.post(url)

Я думал, что им легко пользоваться, я тоже новичок .... ха-ха

person jason.lu    schedule 20.08.2018

imgResp = urllib3.request.RequestMethods.urlopen(url)

Добавьте это RequestMethods перед использованием urlopen

person khadersha shaik    schedule 06.05.2021