2013-12-22 40 views
1

我正在使用庫ABPY(庫here)for python,但它在舊版本,我認爲。我正在使用Python 3.3。 我確實修復了一些PRINT錯誤,但這就是我知道的多少,我在編程方面真的很新穎。Python 3.3庫abpy,文件undefined

我想獲取一些網頁並從廣告中篩選出來,然後再打印一遍。

EDITED Sg'te'gmuj告訴我如何在Python 2.x的轉換到3.x這是我的新代碼後:

#!/usr/local/bin/python3.1 

import cgitb;cgitb.enable() 

import urllib.request 
response = urllib.request.build_opener() 
response.addheaders = [('User-agent', 'Mozilla/5.0')] 
response = urllib.request.urlopen("http://www.youtube.com") 

html = response.read() 

from abpy import Filter 
with open("easylist.txt") as f: 
ABPFilter = Filter(file('easylist.txt')) 
ABPFilter.match(html) 


print("Content-type: text/html") 
print() 
print (html) 

現在它會顯示一個空白頁

回答

2

剛看了一下圖書​​館,似乎文件「easylist.txt」不存在;您需要創建該文件,並使用適當的過濾器(以ABP指定的任何格式)填充該文件。

此外,它似乎需要一個文件對象;嘗試這樣的東西,而不是:

with open("easylist.txt") as f: 
    ABPFilter = Filter(f) 

我不能說這是完全正確的,雖然因爲我與圖書館沒有經驗,但看着它的代碼我懷疑二者中的任何有問題的,如果不是都。

附錄#1

看着更深入的代碼,我不得不承認,即使修復我提供沒有工作,你將有更多的問題(它在2.X正如你所建議的,當你使用3.x)。我建議使用Python的2to3函數,從典型的Python 2轉換爲Python 3代碼(儘管如此,它並不是萬能的)。該命令行是像這樣:

2to3 -w abpy.py 

這將其轉換在Python 2.x到3.x中的代碼,並重新編寫源文件。

附錄#2

傳遞文件對象應該是「F」的變量,如上面所示的代碼(經修飾以表示;我不重視和剛剛離開舊文件功能在參數中調用)。

您需要將URI傳遞給函數,以及:

ABPFilter.match(URI) 

您需要修改代碼以這些項目傳遞到一個數組(我假定至少);我現在正在玩它看。目前我遇到了一個規則錯誤(不是Python錯誤,而僅僅是abpy.py使用的錯誤處理,這很好,因爲它表明它是正確的思路)。

爲Filter.match功能的代碼如下(使用2to3的Python腳本後):

def match(self, url, elementtype=None): 
    tokens = RE_TOK.split(url) 
    print(tokens) 
    for tok in tokens: 
     if len(tok) > 2: 
      if tok in self.index: 
       for rule in self.index[tok]: 
        if rule.match(url, elementtype=elementtype): 
         print(str(rule)) 

這意味着你是,目前,在一個點上,你需要編程功能;看起來這個模塊只顯示規則。但是,這仍然有用。

這意味着你將不得不修改這個函數來取代HTML,代替「url」參數。您將爲URI列表對HTML進行regex(這可能相當密集),然後通過匹配循環運行每個項目。從那裏開始實際過濾節點的位置,我不確定;但有過濾器類型的列表,所以我假設有一個典型的程序ABP確實刪除節點(可能的話,在某些情況下,僅僅是從HTML移除給定的URI?)

參考

http://docs.python.org/3.3/library/2to3.html

+0

在冷杉謝謝很多。 錯誤消失,但現在不顯示任何內容。 我確實創建了這個文件我從https://easylist-downloads.adblockplus.org/easylist.txt獲取它 我不知道如何完成這段代碼我發佈我的新代碼在下面的答案請採取看它。 –

+0

沒問題。嗯,你能解釋一下你是什麼意思嗎? (意思Python沒有傳遞任何東西給控制檯?)我再看一眼;它似乎在比賽中需要一個URI,但我不是100%確定的。 –

+0

謝謝你告訴我如何轉換,但它什麼都不顯示。我正在重新編輯我的文章,並將我的新代碼放在那裏看看。 –