AttributeError: 'module'オブジェクトに属性 'urlopen'がありません


146

Pythonを使用してWebサイトの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を使用しています。

回答:


245

これは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)

3
こんにちはEumiroです。Pythonで「with」ステートメントを使用しています。接続を使用すると、接続が自動的に閉じられると思いますか?C#のuseステートメントに似ていますか?

@セルジオ:まさに!そして、インデントにより、ファイルがまだ開かれている場所がわかります。
eumiro

こんにちは@eumiroと入力します。「IndentationError:期待されるインデントされたブロック」のエラーがあります。s = url.read()どうすれば解決できますか?x
カレンチャン

@KarenChanあなたは前にインデントを逃していますs=url.read()。その前に4つのスペースがありますか?
numbermaniac 2017年

19

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)

1
with urlopen("http://www.python.org") as url:を使用したpython2では機能しませんAttributeError: addinfourl instance has no attribute '__exit__'。書く必要があるurl = urlopen("http://www.python.org")
orshachar 2018

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

Python v3では、「urllib.request」はそれ自体がモジュールであるため、「urllib」はここでは使用できません。


7

' dataX = urllib.urlopen(url).read() 'をpython 3で 動作させるには(これはpython 2では正しいはずです)、 2つの小さな点を変更するだけです。

1: urllibステートメント自体(中央に.requestを追加):

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

2:その前のimportステートメント( 'import urlib'から次のように変更:

import urllib.request

そしてそれはpython3で動作するはずです:)


3
import urllib.request as ur

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

1

Python 3の場合は、次のようにしてください。

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

ビデオを現在の作業ディレクトリにダウンロードします

ここから助けをもらいました


1

python3の解決策:

from urllib.request import urlopen

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

初心者にとってシンプルで理解しやすい。ありがとう
SHR 2018年

1

2行を変更します。

import urllib.request #line1

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

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

私はあなたの問題が解決することを望みます。



0

6つのモジュールを使用して、python2python3の間でコードの互換性を確保する

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

このようにして、6つのモジュールをsix.moves import urllibからインポートできます
Rajat Shukla

0

あなたのコードはpython2.xで使用されます、あなたはこのように使用できます:

from urllib.request import urlopen
urlopen(url)

ちなみに、呼ばれる別のモジュールrequestsがより使いやすいことを提案します。pipインストールを使用して、次のように使用できます。

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

使いやすいと思いました、私も初心者です。


-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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.