AttributeError: Das Objekt 'module' hat kein Attribut 'urlopen'.


146

Ich versuche, mit Python den HTML-Quellcode einer Website herunterzuladen, erhalte jedoch diesen Fehler.

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'

Ich folge der Anleitung hier: 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)

Ich benutze Python 3.

Antworten:


244

Dies funktioniert in Python 2.x.

Informationen zu Python 3 finden Sie in den Dokumenten :

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
Hallo Eumiro, mit der 'with'-Anweisung in Python wird die Verbindung vermutlich automatisch geschlossen, sobald sie fertig ist. Ähnlich einer use-Anweisung in C #?

@Sergio: genau! Und durch den Einzug sehen Sie, wo Ihre Datei noch geöffnet ist.
Eumiro

Hallo @eumiro, ich habe beim Eingeben den Fehler "IndentationError: Ein eingerückter Block erwartet" s = url.read(). Darf ich fragen, wie ich ihn bitte lösen kann? x
Karen Chan

@ KarenChan Sie vermissen einen Einzug vor s=url.read(); Hast du 4 Felder davor?
Numbermaniac

19

Eine Python 2 + 3-kompatible Lösung ist:

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:funktioniert nicht in python2 mit AttributeError: addinfourl instance has no attribute '__exit__'. url = urlopen("http://www.python.org")
Müssen

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

In Python v3 ist "urllib.request" ein Modul für sich, daher kann "urllib" hier nicht verwendet werden.


7

Damit ' dataX = urllib.urlopen (url) .read () ' in Python 3 funktioniert (dies wäre für Python 2 korrekt gewesen ) , müssen Sie nur zwei kleine Dinge ändern.

1: Die urllib-Anweisung selbst (fügen Sie die .request in der Mitte hinzu):

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

2: Die davor stehende Importanweisung (Wechsel von 'import urlib' zu:

import urllib.request

Und es sollte in Python3 funktionieren :)


3
import urllib.request as ur

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

1

Versuchen Sie für Python 3 Folgendes:

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

Das Video wird in das aktuelle Arbeitsverzeichnis heruntergeladen

Ich habe Hilfe von HIER bekommen


1

Lösung für Python3:

from urllib.request import urlopen

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

Einfach und leicht verständlich für Anfänger. Vielen Dank
SHR

1

ZWEI Zeilen ändern:

import urllib.request #line1

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

Wenn Sie die Ausnahme ERROR 403: Forbidden Error erhalten haben, versuchen Sie Folgendes:

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

Ich hoffe, Ihr Problem ist gelöst.


0

Eine der möglichen Möglichkeiten:

import urllib
...

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

0

Verwenden Sie sechs Module, um Ihren Code zwischen python2 und python3 kompatibel zu machen

urllib.request.urlopen("<your-url>")```

Sie können sechs Module auf diese Weise aus six.moves import urllib
Rajat Shukla

0

Ihren in python2.x verwendeten Code können Sie wie folgt verwenden:

from urllib.request import urlopen
urlopen(url)

Schlagen Sie übrigens vor, dass ein anderes Modul namens benutzerfreundlicher requestsist. Sie können es pipinstallieren und wie folgt verwenden:

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

Ich dachte, es ist einfach zu bedienen, ich bin auch Anfänger ... 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.