使用Pycurl获取HTML

10 投票
2 回答
23172 浏览
提问于 2025-04-16 20:41

我一直在尝试用pycurl获取一个HTML页面,这样我就可以用str.split和一些for循环来解析里面的信息。我知道Pycurl确实获取了HTML,因为它会把内容打印到终端上。但是,如果我尝试做类似下面的事情

html = str(c.perform())  

这个变量只会保存一个字符串,上面写着“None”。

我该如何使用pycurl来获取HTML,或者把它发送到控制台的内容重定向,这样就可以像上面那样用字符串来使用呢?

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

2 个回答

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

当然,你也可以使用文件、临时文件或者其他任何可以存储数据的东西。

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)

撰写回答