AttributeError: 'module' nesnesinin 'urlopen' özelliği yok


146

Bir web sitesinin HTML kaynak kodunu indirmek için Python kullanmaya çalışıyorum ama bu hatayı alıyorum.

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'

Buradaki kılavuzu takip ediyorum: 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 kullanıyorum.

Yanıtlar:


245

Bu Python 2.x sürümünde çalışır.

Python 3 için dokümanlara bakın :

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
Merhaba Eumiro, Python 'ile' ifadesini kullanarak bunu kullanarak bir kez bağlantı otomatik olarak kapatır tahmin? C # kullanım deyimine benzer mi?

@Sergio: kesinlikle! Girintiyle, dosyanızın hala nerede açıldığını görürsünüz.
eumiro

Merhaba @eumiro, ben yazarken "IndentationError: girintili bir blok bekleniyor" hatası var s = url.read(), nasıl çözebilirim sorabilir miyim lütfen? x
Karen Chan

@KarenChan daha önce bir girintiyi kaçırıyorsunuz s=url.read(); ondan önce 4 boşluğun var mı?
numbermaniac

19

Python 2 + 3 uyumlu bir çözüm:

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:ile python2 içinde çalışmaz AttributeError: addinfourl instance has no attribute '__exit__'. Yazmak gerekiyorurl = 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'te "urllib.request" tek başına bir modüldür, bu nedenle "urllib" burada kullanılamaz.


7

' DataX = urllib.urlopen (url) .read () ' in python 3'te çalışmasını sağlamak için (bu python 2 için doğru olurdu ) sadece 2 küçük şeyi değiştirmeniz gerekir.

1: urllib deyiminin kendisi (ortasına .request ekleyin):

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

2: Önündeki içe aktarma ifadesi ('import urlib' ifadesinden şuna değiştir:

import urllib.request

Ve python3 içinde çalışması gerekir :)


3
import urllib.request as ur

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

1

Python 3 için şöyle bir şey deneyin:

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

Videoyu geçerli çalışma dizinine indirir

BURADAN yardım aldım


1

Python3 için çözüm:

from urllib.request import urlopen

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

Yeni başlayanlar için basit ve kolay anlaşılır. Teşekkürler
SHR

1

İKİ satırı değiştirin:

import urllib.request #line1

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

HATA 403: Yasak Hata istisnası varsa şunu deneyin:

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

Umarım sorununuz çözülmüş demektir.


0

Bunu yapmanın olası yollarından biri:

import urllib
...

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

0

Python2 ve python3 arasında kod uyumlu hale getirmek için altı modül kullanın

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

Altı modülü bu şekilde six.moves import urllib'den içe aktarabilirsiniz
Rajat Shukla

0

python2.x içinde kullanılan kodunuzu aşağıdaki gibi kullanabilirsiniz:

from urllib.request import urlopen
urlopen(url)

Bu arada, denilen başka bir modülün requestsdaha kolay kullanılabileceğini, pipyüklemeyi kullanabileceğiniz ve aşağıdaki gibi kullanabileceğinizi önerin :

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

Kullanımı kolay olduğunu düşündüm, ben de acemiyim .... 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.