私は以前の同様の質問を見て、さらに混乱しました。
python 3.4では、URLを指定して、HTMLページを文字列として読み取りたいです。
Perlでは、get()を使用してLWP :: Simpleでこれを行います。
Matplotlib 1.3.1の例では、import urllib; u1=urllib.urlretrieve(url)
と書かれています。 python3はurlretrieve
を見つけることができません。
HTTPResponse
オブジェクトを取得しているように見えるu1 = urllib.request.urlopen(url)
を試しましたが、印刷したり、長さを取得したり、インデックスを付けたりできません。
u1.body
は存在しません。 python3でHTTPResponse
の説明が見つかりません。
HTTPResponse
オブジェクトに、htmlページの生のバイトを提供する属性がありますか?
(他の質問からの無関係なものには、urllib2
、私のpython、csvパーサーなどには存在しません)
編集:
以前の質問で、部分的に(ほとんど)仕事をしている何かを見つけました:
u2 = urllib.request.urlopen('http://finance.yahoo.com/q?s=aapl&ql=1')
for lines in u2.readlines():
print (lines)
別々の行を読みたくはないが、1つの大きな文字列だけを読みたいので、「部分的に」と言います。
行を連結することもできますが、印刷されるすべての行には、文字「b」が先頭に追加されます。
それはどこから来たのですか?
繰り返しますが、連結する前に最初の文字を削除できたと思いますが、それは間違いです。
Python3はhtmlコードを文字列としてではなくbytearray
として読み取るため、decode
を含むものに変換する必要があることに注意してください。
import urllib.request
fp = urllib.request.urlopen("http://www.python.org")
mybytes = fp.read()
mystr = mybytes.decode("utf8")
fp.close()
print(mystr)
「requests」モジュールを試してみてください、それははるかに簡単です。
#pip install requests for installation
import requests
url = 'https://www.google.com/'
r = requests.get(url)
r.text
urllib.request.urlopen(url).read()
は、生のHTMLページを文字列として返します。
import requests
url = requests.get("http://yahoo.com")
htmltext = url.text
print(htmltext)
これはurllib.urlopen
と同様に機能します。
Urllibを使用してhtmlページを読み取るのは非常に簡単です。単一の文字列として読みたいので、お見せします。
rllib.requestのインポート:
#!/usr/bin/python3.5
import urllib.request
リクエストを準備する
request = urllib.request.Request('http://www.w3schools.com')
物事が簡単にうまくいかない可能性があるため、Webページを要求するときは常に「try/except」を使用します。urlopen()はページを要求します。
try:
response = urllib.request.urlopen(request)
except:
print("something wrong")
Typeは変数の種類を示すすばらしい関数です。ここでは、responseはhttp.responseオブジェクトです。
print(type(response))
応答オブジェクトの読み取り関数は、htmlを変数にバイトとして保存します。再びtype()がこれを確認します。
htmlBytes = response.read()
print(type(htmlBytes))
バイト変数にデコード関数を使用して、単一の文字列を取得します。
htmlStr = htmlBytes.decode("utf8")
print(type(htmlStr))
この文字列を個別の行に分割する場合は、split()関数を使用します。このフォームでは、ページ全体を印刷するか、他の処理を行うために簡単に反復できます。 =
htmlSplit = htmlStr.split('\n')
print(type(htmlSplit))
for line in htmlSplit:
print(line)
これにより、もう少し詳細な回答が得られれば幸いです。 Pythonドキュメンテーションとチュートリアルは素晴らしいです。あなたが持つかもしれないほとんどの質問に答えるので、私はそれをリファレンスとして使用します。
import urllib
some_url = 'https://docs.python.org/2/library/urllib.html'
filehandle = urllib.urlopen(some_url)
print filehandle.read()