2016-06-19 3 views
0
def crawl(url): 
    html = getHTML(url) # getHTML() retruns HTTPResponse 
    print(html.read()) # PRINT STATMENT 1 
    if (html == None): 
     print("Error getting HTML") 
    else: 
     # parse html 
     bsObj = BeautifulSoup(html, "lxml") 
     # print data 
     try: 
      print(bsObj.h1.get_text()) 
     except AttributeError as e: 
      print(e) 

     print(html.read()) # PRINT STAETMENT 2 

..です印刷同じHttpResponseオブジェクトが異なる出力を返します - 私は理解していない何のPython

print文1print文に対し、2枚のプリントのみb''

全体のHTMLを出力しますここで何が起きてるの? ..私はPythonには全く新しいです。

+0

'html == None'を実行しないでください。 http://stackoverflow.com/questions/14247373/python-none-comparison-should-i-use-is-orを参照してください。 – edwinksl

+0

@edwinksl ty ..それは役に立ちます – reversiblean

答えて

1

htmlは、HTTPResponseオブジェクトです。 HTTPResponseは、read()のようなファイルのような操作をサポートしています。

ファイルを読み取るときと同様に、read()は利用可能なデータを消費し、ファイルポインタをファイル/ dataのエンドに移動します。その後のread()には何も返されません。

print(html.read()) 
html.seek(0) # moves the file pointer to byte 0 relative to the start of the file/data 
  • 保存かわり結果:

    html_body = html.read() 
    print(html_body) 
    
  • seek()方法を使用して読んだ後

    1. が先頭にファイルポインタをリセットします。

      は、2つのオプションがあります

      通常、2番目のオプションは再利用が容易であるため、2番目のオプションを使用します。html_body