使用Pycurl获取HTML
我一直在尝试用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)