10

我一直在尝试使用 pycurl 检索 HTML 页面,因此我可以使用 str.split 和一些 for 循环解析它以获取相关信息。我知道 Pycurl 检索 HTML,因为它将它打印到终端,但是,如果我尝试做类似的事情

html = str(c.perform())  

该变量将只包含一个显示“None”的字符串。

如何使用 pycurl 获取 html,或将它发送的任何内容重定向到控制台,以便可以将其用作如上所述的字符串?

非常感谢任何有任何建议的人!

4

2 回答 2

21

这将发送一个请求并存储/打印响应正文:

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)
于 2011-07-02T00:57:22.313 回答
6

perform() 方法执行 html 提取并将结果写入您指定的函数。您需要提供一个缓冲区来放入 html 和一个写入函数。通常,这可以使用 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()

您还可以使用文件或临时文件或任何其他可以存储数据的东西。

于 2011-07-02T01:02:17.623 回答