2016-03-19 13 views
0

Ich möchte einige Daten von der Website easydrop.ru verschrotten. Ich habe nicht viel Erfahrung, also habe ich mit einigen Problemen konfrontiert.Scrapping Meteor mit Python

Schritt 1: Zuerst habe ich versucht, diese Seite mit requests.get von Anfragen lib zu laden und zu parzieren und parc es mit lxml. Das war ein Misserfolg, weil es hauptsächlich JS-generierten Inhalt gibt. So hatte ich nur einen kleinen Teil, meistens die Information über die Seite.

Schritt 2: Mein zweiter Versuch PyQt Anwendung für JS Generation wurde mit:

import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from lxml import html 

# Take this class for granted.Just use result of rendering. 
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() 



def getFinalHtml(url): 
    r = Render(url) 
    result = r.frame.toHtml() 
    final = html.fragment_fromstring(result, 'root') 
    return final 

Das war besser, aber immer noch erfolglose - die Seite wurde jetzt in Ordnung, jedoch wird die Seite keine Daten enthalten, (Anzahl der aktuellen Benutzer, Artikel, etc.)

Diese Seite verwendet das Meteor-Framework und die Werte erhalten durch und den Wert, der durch die Kommunikation mit ihnen erhalten wird, ohne die Seite neu zu laden.

Schritt 3: Im Moment arbeite ich in einer Sackgasse bin und kann sich nicht vorstellen, wie ich den Inhalt der Seite für die weitere Analyse bekommen :(

ich nur zwei Ideen haben, wie man Daten aus diesen Seiten:

1)laden Seiten in Python (Erweiterung von Schritt 2) und sie usign lxml parce (Leider nicht, ich weiß, wie der Lader zu verbessern Werte von dem Meteor zu bekommen)

2)Verwenden Meteor Funktionen in Python-Daten von dieser Seite zu laden (Benutzer Elemente \) ohne html

Ich habe einige Ideen über zweite Lösung Ich versuche, etwas mit https://github.com/hharnisc/python-meteor lib zu tun. Aber ich in eine Sackgasse bekam, auch wenn Sie versuchen, es zu starten:

ich auf dieser Seite eine Linie von Js-Skript:

Meteor.startup(function (e) { 
     return function() { 
      return t(), Meteor.setInterval(t, 1e3), e.socket = io("https://ws.easydrop.ru", {transports: ["websocket"]}) 
     } 

So habe ich einige Varianten versucht

client = MeteorClient('http://ws.easydrop.ru:3000/websocket')

client = MeteorClient('http://ws.easydrop.ru:3000/')

client = MeteorClient('http://ws.easydrop.ru:443/')

client = MeteorClient('http://ws.easydrop.ru:443/websocket/')

Aber ich habe einen Fehler in py:

raise ValueError("Invalid scheme: %s" % scheme) 
ValueError: Invalid scheme: https 

Was soll ich damit tun arbeiten?

+1

Sie 'seleniumhq' verwenden können, um Javascript-basierte Websites wie Meteor zu kratzen. –

+1

Sie können die API-Aufrufe der Seite untersuchen und diese wiederum mit Pythons Anfrage aufrufen. Das füllt jedoch nicht die gesamte HTML-Seite. – Ehvince

Antwort