Scraping JavaScript -gesteuerte Webseiten mit PYQT4 - Wie können Sie auf Seiten zugreifen, die eine Authentifizierung benötigen?

StackOverflow https://stackoverflow.com/questions/5356948

Frage

Ich muss eine sehr, sehr einfache Seite auf dem Intranet unseres Unternehmens kratzen, um einen unserer internen Prozesse zu automatisieren (die Ausgabe einer Funktion so erfolgreich oder nicht).

Ich fand das folgende Beispiel:

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

Aus http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html Und es ist fast perfekt. Ich muss nur in der Lage sein, Authentifizierung bereitzustellen, um die Seite anzuzeigen.

Ich habe die Dokumentation für PYQT4 durchgesehen und ich gebe zu, dass viel davon über meinem Kopf ist. Wenn jemand helfen könnte, würde ich es schätzen.

Bearbeiten:Leider hat Gruszczys Methode bei mir nicht funktioniert. Als ich durch Urllib2 etwas Ähnliches getan hatte, habe ich den folgenden Code verwendet und es funktionierte ...

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)
War es hilfreich?

Lösung

Ich habe es herausgefunden. Hier ist, was ich am Ende gemacht habe, falls es jemand anderem helfen kann.

#!/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()

Andere Tipps

Versuche dies:

  url = QUrl(url)
  url.setUserName(username)
  url.setPassword(password)
  self.mainFrame().load(url)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top