web-dev-qa-db-ja.com

python 3のurlからhtmlを読む方法

私は以前の同様の質問を見て、さらに混乱しました。

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」が先頭に追加されます。

それはどこから来たのですか?

繰り返しますが、連結する前に最初の文字を削除できたと思いますが、それは間違いです。

24
user1067305

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)
50
davidgh

「requests」モジュールを試してみてください、それははるかに簡単です。

#pip install requests for installation

import requests

url = 'https://www.google.com/'
r = requests.get(url)
r.text

詳細はこちら> http://docs.python-requests.org/en/master/

26
Aaron T.

urllib.request.urlopen(url).read()は、生のHTMLページを文字列として返します。

9
user2629998
import requests

url = requests.get("http://yahoo.com")
htmltext = url.text
print(htmltext)

これはurllib.urlopenと同様に機能します。

8
Ramandeep Singh

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ドキュメンテーションとチュートリアルは素晴らしいです。あなたが持つかもしれないほとんどの質問に答えるので、私はそれをリファレンスとして使用します。

5
import urllib
some_url = 'https://docs.python.org/2/library/urllib.html'
filehandle = urllib.urlopen(some_url)
print filehandle.read()
0
agamike