web-dev-qa-db-ja.com

Python urllib urlopenが機能しない

Urllibモジュールを使用してライブWebからデータを取得しようとしているので、簡単な例を作成しました

ここに私のコードがあります:

import urllib

sock = urllib.request.urlopen("http://diveintopython.org/") 
htmlSource = sock.read()                            
sock.close()                                        
print (htmlSource)  

しかし、私は次のようなエラーが発生しました:

Traceback (most recent call last):
  File "D:\test.py", line 3, in <module>
    sock = urllib.request.urlopen("http://diveintopython.org/") 
AttributeError: 'module' object has no attribute 'request'
10
Matilda Yi Pan

間違ったドキュメントまたは間違ったPythonインタープリターバージョンを読んでいます。 Python 2のPython 3ライブラリを使用しようとしました。

使用する:

import urllib2

sock = urllib2.urlopen("http://diveintopython.org/") 
htmlSource = sock.read()                            
sock.close()                                        
print htmlSource

Python 2 urllib2 library は、Python 3で urllib.request に置き換えられました。

19
Martijn Pieters
import requests
import urllib

link = "http://www.somesite.com/details.pl?urn=2344"

f = urllib.request.urlopen(link)
myfile = f.read()

writeFileObj = open('output.xml', 'wb')
writeFileObj.write(myfile)
writeFileObj.close()
6
Mostafa Ezz

これは私がURLからデータを取得するために使用するものです、必要な場合は同時にファイルを保存できるので、そのニース:

import urllib

result = urllib.urlretrieve("http://diveintopython.org/")

print open(result[0]).read()

出力:

'<!DOCTYPE html><body style="padding:0; margin:0;"><iframe src="http://mcc.godaddy.com/park/pKMcpaMuM2WwoTq1LzRhLzI0" style="visibility: visible;height: 2000px;" allowtransparency="true" marginheight="0" marginwidth="0" frameborder="0" scrolling="no" width="100%"></iframe></body></html>'

編集:urlretrieveはpython 2および3で動作します

3
yamm

Python3では、urllibまたはurllib3

urllib:

import urllib.request
with urllib.request.urlopen('http://docs.python.org') as response:
    htmlSource = response.read()

urllib3:

import urllib3
http = urllib3.PoolManager()
r = http.request('GET', 'http://docs.python.org')
htmlSource = r.data

詳細については、 rllib または python のドキュメントをご覧ください。

3
brada

requestsからurllibをインポートしてから、この形式を試してください。

from urllib import request
urllib.request.urlopen( )
0
Seth Okeyo