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。

397452 次浏览

这在 Python 2.x 中可以工作。

医生中查看 Python 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)
import urllib.request as ur
s = ur.urlopen("http://www.google.com")
sl = s.read()
print(sl)

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

import urllib.request as ur


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

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)

要让‘ DataX = < strong > urllib.urlopen (url) . read ()’在 python3(对于 python < strong > 2 ,这是正确的)中工作,您只需要更改两个小东西。

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

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

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

import urllib.request

它应该在 python3中工作:)

对于 python 3,可以尝试这样做:

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

它会把视频下载到当前工作目录

这里有人帮我

Python3的解决方案:

from urllib.request import urlopen


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

如果您的代码使用 Python 2.x 版本,您可以执行以下操作:

from urllib.request import urlopen
urlopen(url)

顺便说一下,我建议使用另一个模块 requests,它使用起来更加友好。您可以使用 pip安装它,并像这样使用它:

import requests
requests.get(url)
requests.post(url)
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)

一种可能的方法是:

import urllib
...


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

换两行:

import urllib.request #line1


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

如果您得到错误403: 禁止的错误异常,请尝试这样做:

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

我希望你的问题解决了。

使用第三方 six模组使您的代码在 Python 2和 Python 3之间兼容。

from six.moves import urllib
urllib.request.urlopen("<your-url>")
imgResp = urllib3.request.RequestMethods.urlopen(url)

在使用 urlopen 之前添加此 RequestMethods