2011-07-02 19 views
7

Pycurl kullanarak bir HTML sayfası almaya çalışıyorum, böylece str.split ve bazı döngüler için ilgili bilgiler için ayrıştırabilirim. Ben sadece "Yok" diyor bir dize yapacakPycurl ile HTML alma

html = str(c.perform()) 

gibi değişken bir şey yapmaya eğer, ancak, terminale yazdırır beri pycurl, HTML alır biliyorum.

Html'yi almak için pycurl'ı veya konsolda gönderdiği her şeyi yeniden yönlendirerek, yukarıda açıklandığı gibi bir dize olarak nasıl kullanılabilir?

Önerilere sahip olan herkese çok teşekkürler! Bu bir istek ve mağaza/baskı tepkisi gövdesini gönderecek

cevap

20

: Eğer yanıt başlıklarını depolamak istiyorsanız

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 

, kullanım:

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

Harika! Tam olarak aradığım şeyi yapıyor. Yine de bir satır yanlış. Depolama = StringIO.StringIO(). Aksi halde, bir hata ortaya çıkar. Her neyse, yardımlarınız için teşekkürler! – Sinthet

+3

Bence olduğu gibi olduğunu düşünüyorum. 'Ben StrongIO ithal StringIO' –

+0

Ah yapmak, bu olabilir. Kaynağımı kontrol ettim ve tüm kütüphaneyi yeni aldım. Karışıklık için özür dilerim! – Sinthet

4

yöntem html yürütür() gerçekleştirmek sonucu, belirttiğiniz bir işleve getirir ve yazar. Html'yi ve bir yazma işlevini koymak için bir arabellek sağlamanız gerekir.

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() 

Ayrıca bir dosya veya tempfile veya veri saklayabilir başka bir şey kullanabilirsiniz: Genellikle, bu şöyle bir StringIO nesnesi kullanılarak gerçekleştirilebilir.