Получение HTML с Pycurl - PullRequest
       13

Получение HTML с Pycurl

8 голосов
/ 02 июля 2011

Я пытался извлечь страницу HTML, используя pycurl, поэтому я могу затем проанализировать ее на предмет релевантной информации, используя str.split и некоторые для циклов for.Я знаю, что Pycurl извлекает HTML, поскольку он печатает его на терминал, однако, если я попытаюсь сделать что-то вроде

html = str(c.perform())  

, переменная будет просто содержать строку, которая говорит "None".

Как я могу использовать pycurl для получения html или перенаправить все, что он отправляет на консоль, чтобы его можно было использовать в качестве строки, как описано выше?

Большое спасибо всем, кто имеетпредложения!

Ответы [ 2 ]

20 голосов
/ 02 июля 2011

отправит запрос и сохранит / распечатает тело ответа:

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)
5 голосов
/ 02 июля 2011

Метод execute () выполняет выборку 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()

Вы также можете использовать файл, временный файл или что-то еще, что может хранить данные.

...