如何使用Python实现广告屏蔽?
我正在慢慢用 PyQt4 搭建一个网页浏览器,感觉速度还不错。不过,我想把 easylist.txt 加进去。我相信广告屏蔽工具就是用这个来阻止浏览器的 HTTP 请求的。
那么,使用 Python/PyQt4 该怎么做呢?
[编辑1] 好的。我想我已经设置好了 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)
不过,这段代码完全没有效果,我看不懂文档,也找不到任何例子。
[编辑2] 我刚注意到,如果我把 self.proxyIP 改成我实际的本地 IP,而不是 127.0.0.1,页面就加载不出来。所以应该是发生了什么事情。
4 个回答
0
easylist.txt 文件就是一个普通的文本文件,像这里展示的那样: http://adblockplus.mozdev.org/easylist/easylist.txt
文件中以 [ 和 ! 开头的行看起来是注释,所以我们只需要在这个文件里找出正确的内容,根据行的开头字符来判断在网址或请求中该查找什么。
1
这个问题是关于网络过滤的吗?
那你可以试试一些外部的网络代理,比如Privoxy(http://en.wikipedia.org/wiki/Privoxy)。
6
我知道这个问题已经很老了,但我想试着给出一个答案,供偶然看到这个问题的人参考。你可以创建一个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)
希望这对你有帮助!