2011-07-02 12 views
7

私はpycurlを使ってHTMLのページを取得しようとしています。そのため、str.splitといくつかのforループを使って関連情報を解析することができます。私は、変数だけで「None」を言わない文字列を保持します PycurlでHTMLを取得する

html = str(c.perform()) 

ような何かをしようとした場合、それは、しかし、端末にそれを印刷しますので、私は、PycurlはHTMLを取得します知っています。

pycurlを使用してhtmlを取得する方法、またはコンソールに送信したものをリダイレクトすることで、上記のように文字列として使用できますか?

ご意見ありがとうございます。

答えて

20

これはレスポンスボディ印刷/リクエストや店舗をお送りします:使用、あなたはレスポンスヘッダを格納する場合

from StringIO import StringIO  
import pycurl 

url = 'http://www.google.com/' 

storage = StringIO() 
c = pycurl.Curl() 
c.setopt(c.URL, url) 
c.setopt(c.WRITEFUNCTION, storage.write) 
c.perform() 
c.close() 
content = storage.getvalue() 
print content 

を:

c.setopt(c.HEADERFUNCTION, storage.write) 
+0

素晴らしい!それはまさに私が探していたものです。 1行が間違っています。それはstorage = StringIO.StringIO()と言うべきです。それ以外の場合は、エラーが発生します。関係なく、あなたの助けに感謝!! – Sinthet

+3

私はそれが正しいと思います。私は 'StrongIO import StringIO'から通知します。 –

+0

ああ、そうかもしれません。私は自分のソースをチェックし、ライブラリ全体をインポートしました。混乱させて申し訳ありません! – Sinthet

4

を行う()メソッドは、HTMLを実行取得した結果を指定した関数にフェッチして書き込みます。あなたはhtmlを書くためのバッファとwrite関数を用意する必要があります。通常、これは次のようにStringIOオブジェクトを使用して実行できます。

import pycurl 
import StringIO 

c = pycurl.Curl() 
c.setopt(pycurl.URL, "http://www.google.com/") 

b = StringIO.StringIO() 
c.setopt(pycurl.WRITEFUNCTION, b.write) 
c.setopt(pycurl.FOLLOWLOCATION, 1) 
c.setopt(pycurl.MAXREDIRS, 5) 
c.perform() 
html = b.getvalue() 

また、データを格納できるファイルまたは一時ファイルなどを使用することもできます。

関連する問題