AttributeError:'module'对象没有属性'urlopen'

126 python urllib python-3.x

我试图使用Python下载网站的HTML源代码,但我收到此错误.

回溯(最近通话最后一个):
文件"C:\用户\ Sergio.Tapia \文档\的NetBeansProjects\DICParser的\ src\WebDownload.py",3号线,在文件=了urllib.urlopen(" HTTP://www.python .ORG ")AttributeError的:'模块’对象没有属性'的urlopen’

我在这里以下指南:http://www.boddie.org.uk/python/HTML.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'
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3,感谢您的帮助!

eum*_*iro 206

这适用于Python 2.x.

对于Python 3,请看这里:

http://docs.python.org/py3k/library/urllib.request.html?highlight=urllib#urllib.request.urlopen

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)
Run Code Online (Sandbox Code Playgroud)

  • 嗨Eumiro,在Python中使用'with'语句我猜它一旦使用它就会自动关闭连接?类似于C#中的use语句? (3认同)

Mar*_*oma 18

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)
Run Code Online (Sandbox Code Playgroud)


小智 14

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

在Python v3中,"urllib.request"本身就是一个模块,因此这里不能使用"urllib".


小智 9

更改两行:

import urllib.request #line1

#Replace
urllib.urlopen("http://www.python.org")
#To
urllib.request.urlopen("http://www.python.org") #line2
Run Code Online (Sandbox Code Playgroud)

如果您遇到 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()
Run Code Online (Sandbox Code Playgroud)

我希望你的问题得到解决。


Ste*_*utz 5

为了使“ dataX = urllib.urlopen(url).read() ”在python 3中 工作(这对于python 2来说是正确的),您只需更改2个小东西即可。

1: urllib语句本身(在中间添加.request):

dataX = urllib.request.urlopen(url).read()
Run Code Online (Sandbox Code Playgroud)

2:其前面的import语句(从“ import urlib”更改为:

import urllib.request
Run Code Online (Sandbox Code Playgroud)

它应该在python3中工作:)