AttributeError: objek 'modul' tidak memiliki atribut 'urlopen'

146

Saya mencoba menggunakan Python untuk mengunduh kode sumber HTML suatu situs web tetapi saya menerima kesalahan ini.

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'

Saya mengikuti panduan di sini: 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)

Saya menggunakan Python 3.

pppery
sumber

Jawaban:

245

Ini berfungsi dalam Python 2.x.

Untuk Python 3 lihat di dokumen :

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)
eumiro
sumber
3
Hai Eumiro, menggunakan pernyataan 'with' dengan Python Saya kira itu menutup koneksi secara otomatis setelah selesai menggunakannya? Mirip dengan pernyataan penggunaan dalam C #?
@Sergio: persis! Dan melalui lekukan Anda melihat di mana file Anda masih dibuka.
eumiro
Halo @ eumiro, saya memiliki kesalahan "IndentationError: expected a indent block" saat saya mengetik s = url.read(), bolehkah saya bertanya bagaimana saya bisa menyelesaikannya? x
Karen Chan
@ KarenChan Anda kehilangan indentasi sebelumnya s=url.read(); apakah Anda punya 4 spasi sebelumnya?
numbermaniac
19

Solusi yang kompatibel dengan Python 2 + 3 adalah:

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)
Martin Thoma
sumber
1
with urlopen("http://www.python.org") as url:tidak bekerja di python2 dengan AttributeError: addinfourl instance has no attribute '__exit__'. Perlu menulisurl = urlopen("http://www.python.org")
orshachar
15
import urllib.request as ur
s = ur.urlopen("http://www.google.com")
sl = s.read()
print(sl)

Dalam Python v3 "urllib.request" adalah modul dengan sendirinya, oleh karena itu "urllib" tidak dapat digunakan di sini.

Manu Mariaraj
sumber
7

Untuk mendapatkan ' dataX = urllib.urlopen (url) .read () ' yang bekerja di python 3 (ini seharusnya benar untuk python 2 ), Anda hanya perlu mengubah 2 hal kecil.

1: Pernyataan urllib itu sendiri (tambahkan .request di tengah):

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

2: Pernyataan impor sebelumnya (ubah dari 'impor urlib' ke:

import urllib.request

Dan itu harus bekerja di python3 :)

Steven B. Peutz
sumber
3
import urllib.request as ur

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

Untuk python 3, coba sesuatu seperti ini:

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

Ini akan mengunduh video ke direktori kerja saat ini

Saya mendapat bantuan dari SINI

batu-batuan
sumber
1

Solusi untuk python3:

from urllib.request import urlopen

url = 'http://www.python.org'
file = urlopen(url)
html = file.read()
print(html)
Banjali
sumber
Sederhana dan mudah dimengerti untuk pemula. Terima kasih
SHR
1

Ubah DUA garis:

import urllib.request #line1

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

Jika Anda mendapat ERROR 403: Pengecualian Kesalahan Terlarang coba ini:

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

Saya harap masalah Anda teratasi.

Shahzaib Chadhar
sumber
0

Salah satu cara yang mungkin untuk melakukannya:

import urllib
...

try:
    # Python 2
    from urllib2 import urlopen
except ImportError:
    # Python 3
    from urllib.request import urlopen
Vasyl Lyashkevych
sumber
0

Gunakan enam modul untuk membuat kode Anda kompatibel antara python2 dan python3

urllib.request.urlopen("<your-url>")```
Rajat Shukla
sumber
Anda dapat mengimpor enam modul dengan cara ini dari six.moves import urllib
Rajat Shukla
0

kode Anda digunakan di python2.x, Anda dapat menggunakan seperti ini:

from urllib.request import urlopen
urlopen(url)

Omong-omong, sarankan modul lain yang disebut requestslebih ramah untuk digunakan, Anda dapat menggunakan pipmenginstalnya, dan gunakan seperti ini:

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

Saya pikir itu mudah digunakan, saya juga pemula .... hahah

jason.lu
sumber
-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)
pengguna11649630
sumber