Cómo raspar páginas web controladas por Javascript con PyQt4: ¿cómo acceder a las páginas que necesitan autenticación?

Tengo que raspar una página muy, muy simple en la intranet de nuestra compañía para automatizar uno de nuestros procesos internos (devolver la salida de una función como exitosa o no).

Encontré el siguiente ejemplo:

import sys from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtWebKit import * class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(QUrl(url)) self.app.exec_() def _loadFinished(self, result): self.frame = self.mainFrame() self.app.quit() url = 'http://sitescraper.net' r = Render(url) html = r.frame.toHtml() 

Desde http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html y es casi perfecto. Solo necesito poder proporcionar autenticación para ver la página.

He estado revisando la documentación de PyQt4 y admitiré que gran parte está por encima de mi cabeza. Si alguien pudiera ayudar, te lo agradecería.

Edit: Desafortunadamente el método de Gruszczy no funcionó para mí. Cuando hice algo similar a través de urllib2, utilicé el siguiente código y funcionó …

 username = 'user' password = 'pass' req = urllib2.Request(url) base64string = base64.encodestring('%s:%s' % (username, password))[:-1] authheader = "Basic %s" % base64string req.add_header("Authorization", authheader) handle = urllib2.urlopen(req) 

Me lo imaginé. Esto es lo que terminé en caso de que pueda ayudar a alguien más.

 #!/usr/bin/python # -*- coding: latin-1 -*- import sys import base64 from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtWebKit import * from PyQt4 import QtNetwork class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) username = 'username' password = 'password' base64string = base64.encodestring('%s:%s' % (username, password))[:-1] authheader = "Basic %s" % base64string headerKey = QByteArray("Authorization") headerValue = QByteArray(authheader) url = QUrl(url) req = QtNetwork.QNetworkRequest() req.setRawHeader(headerKey, headerValue) req.setUrl(url) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(req) self.app.exec_() def _loadFinished(self, result): self.frame = self.mainFrame() self.app.quit() def main(): url = 'http://www.google.com' r = Render(url) html = r.frame.toHtml() 

Prueba esto:

  url = QUrl(url) url.setUserName(username) url.setPassword(password) self.mainFrame().load(url)