2011-07-02 26 views
7

Tôi đã cố gắng để lấy một trang HTML sử dụng pycurl, vậy thì tôi có thể phân tích nó để biết thông tin có liên quan sử dụng str.split và một số cho vòng lặp. Tôi biết Pycurl lấy HTML, vì nó in nó vào thiết bị đầu cuối, tuy nhiên, nếu tôi cố gắng làm điều gì đó nhưBắt HTML với Pycurl

html = str(c.perform()) 

Biến sẽ chỉ tổ chức một chuỗi mà nói "Không".

Làm thế nào tôi có thể sử dụng để có được pycurl html, hoặc chuyển hướng bất cứ điều gì nó gửi đến giao diện điều khiển để nó có thể được sử dụng như là một chuỗi như đã mô tả ở trên không?

Thanks a lot cho bất cứ ai có bất cứ đề nghị!

Trả lời

20

này sẽ gửi một yêu cầu và lưu trữ/in cơ thể phản ứng:

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 

nếu bạn muốn để lưu trữ các tiêu đề phản ứng, sử dụng:

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

Tuyệt vời! Điều đó thực hiện chính xác những gì tôi đang tìm kiếm. Mặc dù, một dòng là không chính xác. Nó sẽ nói lưu trữ = StringIO.StringIO(). Nếu không, một lỗi được nâng lên. Bất kể, nhờ sự giúp đỡ của bạn !! – Sinthet

+3

tôi nghĩ rằng đó là chính xác như-là. thông báo tôi làm 'từ StrongIO nhập StringIO' –

+0

Ah, đó có thể là nó. Tôi đã kiểm tra nguồn của mình và chỉ cần nhập toàn bộ thư viện. Xin lỗi vì sự nhầm lẫn! – Sinthet

4

Các thực hiện() phương pháp thực thi html tìm nạp và ghi kết quả vào một hàm bạn chỉ định. Bạn cần cung cấp bộ đệm để đưa html vào và chức năng ghi. Thông thường, điều này có thể được thực hiện bằng cách sử dụng đối tượng StringIO như sau:

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

Bạn cũng có thể sử dụng một tập tin hoặc tempfile hoặc bất cứ điều gì khác mà có thể lưu trữ dữ liệu.