【问题标题】:Getting HTML with Pycurl使用 Pycurl 获取 HTML
【发布时间】:2011-09-27 02:49:36
【问题描述】:

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

html = str(c.perform())  

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

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

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

【问题讨论】:

    标签: python pycurl


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 太棒了!这正是我一直在寻找的。虽然,一行是不正确的。它应该说 storage = StringIO.StringIO()。否则,会引发错误。无论如何,感谢您的帮助!
    • 我认为它是正确的。注意我做'from StrongIO import StringIO'
    • 啊,可能是这样。我检查了我的源代码并导入了整个库。很抱歉造成混乱!
    • 有没有机会为 Python3 更新这个?看起来 Python3 弃用了 StringIO 以支持 io.StringIO,它不像上面那样工作。
    • 对于 Python 3,请改用 io.BytesIO,但随后 .getvalue() 将返回 bytes,因此您应该使用 .decode("utf-8") 将它们转换为字符串
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2021-01-09
      相关资源
      最近更新 更多