AttributeError : 'module'객체에 'urlopen'속성이 없습니다.


146

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)

파이썬 3을 사용하고 있습니다.

답변:


245

이것은 Python 2.x에서 작동합니다.

파이썬 3의 경우 문서를 살펴보십시오 .

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)

3
안녕하세요 Eumiro, 파이썬에서 'with'문을 사용하면 연결이 끝나면 연결이 자동으로 닫히는 것 같습니다. C #의 use 문과 비슷합니까?

@Sergio : 정확히! 들여 쓰기를 통해 파일이 여전히 열려있는 곳을 볼 수 있습니다.
eumiro

안녕하세요 @eumiro, 입력 할 때 "IndentationError : indented block이 예상되었습니다"라는 오류가 발생했습니다. s = url.read()어떻게 해결할 수 있습니까? x
Karen Chan

@KarenChan 이전에 들여 쓰기가 누락되었습니다 s=url.read(). 4 칸 전에 있어요?
numbermaniac

19

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)

1
with urlopen("http://www.python.org") as url:python2에서는 작동하지 않습니다 AttributeError: addinfourl instance has no attribute '__exit__'. 작성 필요url = urlopen("http://www.python.org")
orshachar

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

Python v3에서 "urllib.request"는 자체 모듈이므로 "urllib"는 여기서 사용할 수 없습니다.


7

얻으려면 ' DATAX을 = urllib.urlopen (URL) .read () '파이썬에서 작업 3 (이 파이썬에 대한 올바른했을 것이다 2 ) 당신은 그냥이 작은 일들을 변경해야합니다.

1 : urllib 문 자체 (중간에 .request 추가) :

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

2 : 앞에 나오는 import 문 ( 'import urlib'에서 다음으로 변경 :

import urllib.request

그리고 그것은 python3에서 작동해야합니다 :)


3
import urllib.request as ur

filehandler = ur.urlopen ('http://www.google.com')
for line in filehandler:
    print(line.strip())

1

파이썬 3의 경우 다음과 같이 시도하십시오.

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

비디오를 현재 작업 디렉토리로 다운로드합니다

여기에서 도움을 받았습니다


1

Python3 용 솔루션 :

from urllib.request import urlopen

url = 'http://www.python.org'
file = urlopen(url)
html = file.read()
print(html)

초보자에게는 간단하고 이해하기 쉽습니다. 감사합니다
SHR

1

두 줄 변경 :

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()

문제가 해결 되었기를 바랍니다.


0

가능한 방법 중 하나 :

import urllib
...

try:
    # Python 2
    from urllib2 import urlopen
except ImportError:
    # Python 3
    from urllib.request import urlopen


0

python2.x에서 사용되는 코드는 다음과 같이 사용할 수 있습니다.

from urllib.request import urlopen
urlopen(url)

그건 그렇고, 다른 모듈 requests이 더 친숙 pip하다고 제안 하면 설치하고 다음과 같이 사용할 수 있습니다 .

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

나는 그것이 사용하기 쉽다고 생각했다. 나도 초보자이다 .... hahah


-1
import urllib
import urllib.request
from bs4 import BeautifulSoup


with urllib.request.urlopen("http://www.newegg.com/") as url:
    s = url.read()
    print(s)
soup = BeautifulSoup(s, "html.parser")
all_tag_a = soup.find_all("a", limit=10)

for links in all_tag_a:
    #print(links.get('href'))
    print(links)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.