2011-03-18 13 views
9

मुझे हमारी आंतरिक प्रक्रियाओं में से एक को स्वचालित करने के लिए हमारी कंपनी के इंट्रानेट पर एक बहुत ही सरल पृष्ठ को स्क्रैप करना होगा (किसी फ़ंक्शन के आउटपुट को सफल या नहीं लौटाएं)।PyQt4 के साथ जावास्क्रिप्ट संचालित वेब पेज स्क्रैपिंग - प्रमाणीकरण की आवश्यकता वाले पृष्ठों तक कैसे पहुंचे?

मैं निम्न उदाहरण पाया:

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 से और यह लगभग एकदम सही है। मुझे बस पृष्ठ देखने के लिए प्रमाणीकरण प्रदान करने में सक्षम होना चाहिए।

मैं पीईक्यूटी 4 के लिए प्रलेखन देख रहा हूं और मैं स्वीकार करूँगा कि यह मेरे सिर पर है। अगर कोई मदद कर सकता है, तो मैं इसकी सराहना करता हूं।

संपादित करें: दुर्भाग्य से gruszczy की विधि मेरे लिए काम नहीं करती है। जब मैं 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) 

उत्तर

7

मैं इसे समझ से बाहर। अगर मैं किसी और की मदद कर सकता हूं तो यहां क्या हुआ है।

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

इस प्रयास करें:

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

यह सुनिश्चित नहीं था कि यहां टिप्पणी क्षेत्र में कोड को सही तरीके से कैसे प्रारूपित किया जाए, इसलिए मैंने ऊपर दिए गए प्रश्न को संपादित किया। – merph

+0

तब मुझे डर है कि मुझे नहीं पता कि यह कैसे करें: -/ – gruszczy

+0

यह अच्छा है, वैसे भी टाइप करें। तुमने मुझे सही रास्ते पर स्थापित किया। – merph

संबंधित मुद्दे