2009-07-04 16 views
4

Ich baue langsam eine web browser in PyQt4 und mag die Geschwindigkeit, die ich davon bekomme. Ich möchte jedoch easylist.txt damit kombinieren. Ich glaube, dass Adblock dies verwendet, um HTTP-Anfragen durch den Browser zu blockieren.Wie würden Sie mit Python adblockieren?

Wie würden Sie mit Python/PyQt4 umgehen?

[edit1] Ok. Ich denke, ich habe Privoxy eingerichtet. Ich habe keine zusätzlichen Filter eingerichtet und es scheint zu funktionieren. Die PyQt4 habe ich versucht, schaut zu verwenden wie diese

self.proxyIP = "127.0.0.1"
self.proxyPORT= 8118
proxy = QNetworkProxy()
proxy.setType(QNetworkProxy.HttpProxy)
proxy.setHostName(self.proxyIP)
proxy.setPort(self.proxyPORT)
QNetworkProxy.setApplicationProxy(proxy)

Dies ist jedoch absolut nichts und ich kann nicht Sinn der docs machen und kann keine Beispiele finden.

[edit2] Ich habe gerade bemerkt, dass ich selbst.proxyIP zu meiner tatsächlichen lokalen IP statt 127.0.0.1 ändere die Seite nicht lädt. Also passiert etwas.

+2

Haben Sie die Kontrolle über Python, welche HTTP-Anfragen durchgeführt werden? Wenn nicht, wird es schwierig. Wenn ja, dann ist es trivial. Sooo .... seltsame Frage, denke ich. –

+0

Ich habe gerade einen Blick auf http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qhttp.html geworfen und ich denke, dass es möglich sein könnte. Vielleicht ist es nur eine Frage herauszufinden, wie. – regomodo

+0

Was fragst du? Wie erkenne ich Anzeigen? Wenn ja, würde ich mir eine Kopie des EasyList-Abonnements von AdBlock Plus besorgen und diese verwenden. – Eli

Antwort

0

Ist diese Frage über Web-Filterung?

Dann versuchen Sie einige der externen Web-Proxy, für die Probe Privoxy (http://en.wikipedia.org/wiki/Privoxy).

+0

Ja, Web-Filterung. Wenn privoxy tut, was ich brauche, würde das Mühe sparen. Wäre es effizienter, Anfragen zu verhindern statt sie zu blockieren? – regomodo

+0

Ja, definitiv. Wenn Sie es blockieren, laden Sie immer noch die Ressource (Bild, Skript, was auch immer); Die Anfrage wird noch gestellt. Wenn Sie die Anforderung verhindern, wird kein Ladevorgang ausgeführt. –

+0

Verhindern ... Block .. Was ist der Unterschied hier? Es kann schwierig sein, HTML-Code zum Blockieren von G00gle Ads (für Beispiel) neu zu schreiben, aber es ist einfach, Anfragen per URL zu erfassen und zu blockieren. –

0

Die easylist.txt Datei ist einfach Klartext, wie hier gezeigt: http://adblockplus.mozdev.org/easylist/easylist.txt

Linien beginnend mit [und auch! anscheinend sind es Kommentare, also ist es einfach ein Fall, die Datei zu sortieren und nach den richtigen Dingen in der URL/Anfrage zu suchen, abhängig vom Anfangsbuchstaben der Zeile in der easylist.txt Datei.

+0

Ich wusste schon, was in der Liste war. Ich versuche nur zu sehen, ob es möglich ist, Anfragen zu blockieren oder sie zu verhindern. – regomodo

4

Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich würde versuchen, eine Antwort für jeden zu geben, der zufällig darüber stolpert. Sie könnten eine Unterklasse von QNetworkAccessManager erstellen und sie mit https://github.com/atereshkin/abpy kombinieren. Etwas Art wie folgt aus:

from PyQt4.QtNetwork import QNetworkAccessManager 
from abpy import Filter 
adblockFilter = Filter(file("easylist.txt")) 
class MyNetworkAccessManager(QNetworkAccessManager): 
    def createRequest(self, op, request, device=None): 
     url = request.url().toString() 
     doFilter = adblockFilter.match(url) 
     if doFilter: 
      return QNetworkAccessManager.createRequest(self, self.GetOperation, QNetworkRequest(QUrl())) 
     else: 
      QNetworkAccessManager.createRequest(self, op, request, device) 
myNetworkAccessManager = MyNetworkAccessManager() 

Danach setzte die folgenden auf alle Ihre QWebView Instanzen oder eine Unterklasse von QWebView machen:

QWebView.page().setNetworkAccessManager(myNetworkAccessManager) 

hoffe, das hilft!

Verwandte Themen