2017-09-05 1 views
0

ダウンロード時間を測定するために、最終的には、その特定のウェブのロード時間を測定ページ。残念ながら、私が思いついたコードは、HTMLタグの内側のURLに従わないので、ブラウザ上の他のウェブサイトからもいくつかのコンテンツをダウンロードした後に完全に読み込まれるのに10秒かかるウェブページは、私のコードには完全にロードされていますが、これは私のコードが正しくないことを示しています! BrowserLikeRedirectAgentとRedirectAgentを使用した場合でも、結果は同じです。コメントは感謝しています。ツイストHTTPクライアントは、ページ全体をダウンロードして、私はHTTPクライアントを実装し、特定のURLの完全なWebページをダウンロードするために、ツイストエージェントを使用しようとした

def init_http(url): 
    userAgent = 'Twisted/%s (httpclient.py)' % (version.short(),) 
    agent = BrowserLikeRedirectAgent(Agent(reactor)) 

    def response_time_calculator(test,t1): 
     end_time = time.time() 
     response_time = end_time - t1 
     print ("Got the Whole page in: ", response_time) 

    start_time = time.time() 

    d = agent.request(
     b'GET', str(url), Headers({'user-agent': [userAgent]})) 
    def cbResponse(response): 
     if response.length is not UNKNOWN_LENGTH: 
      print('The response body will consist of', response.length, 'bytes.') 
     else: 
      print('The response body length is unknown.') 
     d = readBody(response) 
     d.addCallback(response_time_calculator, start_time) 
     return d 
    d.addCallback(cbResponse) 

答えて

1

time.clockは、Windows(奇妙なことに)の壁掛け時間を測定します。すべてのプラットフォームで壁掛け時間を測定するtime.timeを使用してください。

また、リンク先の部分を実装する必要があります。 Agent.requestは、要求したリソースを正確にダウンロードします。そのリソースが他のリソースへのリンクを含むHTMLである場合、データを解析し、リンクを抽出し、それに従わなければなりません。

あなたは治療に目を向けることができます。そうでない場合は、html5libのように少し小さい(機能が少ない)依存関係を追加できます。ような何か:

d = readBody(response) 
    d.addCallback(load_images) 
    d.addCallback(response_time_calculator, start_time) 

... 

from twisted.internet.defer import gatherResults 
import html5lib 

def load_images(html_bytes): 
    image_requests = [] 
    doc = html5lib.parse(html_bytes) 
    for img in doc.xpath("//img"): 
     d = agent.request(img.src) 
     d.addCallback(readBody) 
     image_requests.append(d) 
    return gatherResults(image_requests) 

は、私が正しいURL解像度(すなわち、IMGのSRCで相対リンクを処理)を省略してきましたし、実際にこれをテストしていません。おそらく多くのバグがありますが、うまくいけばアイデアをはっきりさせます。

+0

time.clockためのおかげで、私はちょうどロードするタグを必要とするので、そのアドレスは、バックツイストエージェントにそれについて何らかの回避策を供給することができないのですか?私はコードで新しいライブラリを実装するのではなく、むしろ私が望むものではないので、私はTwistedとPythonだけで問題を処理するソリューションを探します。 – DeFoG

+1

もしあなたがscrapyを使いたくないのであれば、htmlを解析し、imgタグを見つけ出し、そのソースを解釈し、新しい 'Agent.request'呼び出しを発行する必要があります。 Twistedにはあなたのためにこのリンクを実行するものは何もありません。 Twistedには本当にhtmlパーサはありません。 stdlibには非常に古く、それほど素晴らしいものはありませんが、html5仕様を実装する 'html5lib'を使用することをお勧めします。そして、これらの日を解析する唯一の純粋な方法です。 –

関連する問題