1

ソフトウェアの特定の部分で、単純に URL のソース コードを取得したいので、その文字列 (ソース) を解析して何かを実行したいと考えています。問題は、実際にプログラムを実行したときにソースを取得する方法がわからないことです。たとえそれが IDLE で動作していてもです。

import urllib2

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

page_source

たとえば、「page_source」は何も出力せず、単に黙って実行を終了します。同期していないことが原因だと思いますが、解決方法がわかりません。私も試しました(必死の試みとして):

import urllib2
import time

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

time.sleep(4)

page_source

これも機能しません。

私はすでにresponse.codeaa while ループを取得して作成することを考えていました。

while (response.code !== 200):
    time.sleep(4)

しかし、「response.code」は単に何も返さないため、失敗します。

ユーザーが接続されているなどの問題は、コードの残りの部分で既に処理されているため、心配する必要はありません。実際に必要なのは、ページ ソースを取得して解析する方法を理解することだけです。

4

1 に答える 1

4

リクエストは確かに同期的です。問題は、式を評価しても実際には出力されないことです。値を表示したい場合は、明示的に使用する必要がありますprint:

import urllib2

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
req = urllib2.Request('http://www.google.com')
response = urllib2.urlopen(req)
page_source = response.read()

print page_source

printおそらく、Python シェルでコードを入力するときに が必要ないことに気付いたでしょう。これは、Python シェルがモジュールとして表示される場合とは少し異なる方法でコードを解析および実行し、入力がスタンドアロンの式として解析されるかどうかを検出し、そうであれば自動的に出力するためです。ソースファイルの実行時には、この簡略表記は適用されません。

Python が文字列をソース コードとして解析するさまざまな方法の詳細に興味がある場合は、組み込みcompile関数を参照してください。mode3 つの異なる解析モードから選択する引数があることに注意してください。Python シェルはモードを使用しますsingleが、通常のソース ファイルは としてコンパイルされexecます。最後のモード は、 Python の組み込み関数evalによって使用されます。eval

于 2013-03-28T23:58:55.540 に答える