你会如何使用Python进行广告拦截?

时间:2009-07-04 23:29:48

标签: python pyqt pyqt4 adblock

我正在慢慢地在PyQt4中构建一个web browser,就像我正在摆脱它的速度一样。但是,我想将easylist.txt与它结合起来。我相信adblock使用它来阻止浏览器的http请求。

你会如何使用python / PyQt4?

[edit1]好的。我想我已经设置了Privoxy。我没有设置任何额外的过滤器,它似乎工作。 PyQt4我试过看起来像这样

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)

但是,这绝对没有任何意义,我无法理解文档,也无法找到任何示例。

[edit2]我刚刚注意到,如果我将self.proxyIP更改为我的实际本地IP而不是127.0.0.1,则页面无法加载。所以事情正在发生。

4 个答案:

答案 0 :(得分:5)

我知道这是一个老问题,但我想我会尝试给碰巧碰到它的人找一个答案。您可以创建QNetworkAccessManager的子类并将其与https://github.com/atereshkin/abpy组合。有点像这样:

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()

之后,在所有QWebView实例上设置以下内容,或者创建QWebView的子类:

QWebView.page().setNetworkAccessManager(myNetworkAccessManager)

希望这有帮助!

答案 1 :(得分:0)

这是关于网页过滤的问题吗?

然后尝试使用一些外部Web代理,用于示例Privoxy(http://en.wikipedia.org/wiki/Privoxy)。

答案 2 :(得分:0)

easylist.txt文件只是纯文本,如下所示:http://adblockplus.mozdev.org/easylist/easylist.txt

以[和]开头的行!似乎是注释,所以它只是对文件进行排序,并根据easylist.txt文件中该行的起始字符在url / request中搜索正确的内容。

答案 3 :(得分:0)

Privoxy很稳固。如果您希望它完全基于API,请查看BrightCloud web filtering API