Scraping JavaScript -gesteuerte Webseiten mit PYQT4 - Wie können Sie auf Seiten zugreifen, die eine Authentifizierung benötigen?
-
27-10-2019 - |
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)
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)