Соскабливание веб -страниц, управляемых JavaScript, с PYQT4 - как получить доступ к страницам, которые нуждаются в аутентификации?
-
27-10-2019 - |
Вопрос
Я должен соскрести очень, очень простую страницу в интрасети нашей компании, чтобы автоматизировать один из наших внутренних процессов (возвращение вывода функции как успешная или нет).
Я нашел следующий пример:
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()
Из http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in-python.html И это почти идеально. Мне просто нужно иметь возможность предоставить аутентификацию для просмотра страницы.
Я просматривал документацию для PYQT4, и я признаю, что многие из них над моей головой. Если бы кто -то мог помочь, я бы это признал.
Редактировать:К сожалению, метод Грушки не работал для меня. Когда я сделал что -то подобное через Urllib2, я использовал следующий код, и он сработал ...
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)
Решение
Я понял. Вот что я закончил на случай, если это может помочь кому -то еще.
#!/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()
Другие советы
Попробуй это:
url = QUrl(url)
url.setUserName(username)
url.setPassword(password)
self.mainFrame().load(url)