python3.3库abpy,文件未定义

2024-06-28 20:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为python使用一个库ABPY(libraryhere),但我认为它是在旧版本中。我使用的是python3.3。 我确实修复了一些打印错误,但我知道的就这么多了,我对编程真的很陌生。在

我想获取一些网页,过滤广告,然后再打印一次。在

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

现在它显示一个空白页


Tags: importtxtresponserequesthtml编程错误urllib
1条回答
网友
1楼 · 发布于 2024-06-28 20:25:12

只是瞥了一眼图书馆,看起来文件易用列表.txt“不存在;您需要创建该文件,并用适当的筛选器填充它(无论ABP指定什么格式)。在

此外,它似乎需要一个file对象;请尝试类似于以下内容的方法:

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

我不能说这是完全正确的,因为我没有使用库的经验,但是看看它的代码,我会怀疑这两个问题中的任何一个,如果不是两者都有。在

附录1

更深入地查看代码,我不得不承认,即使我提供的修复确实有效,您也会遇到更多的问题(正如您所建议的,当您使用3.x时,它在2.x中)。我建议使用Python的2to3函数,将典型的python2代码转换为python3代码(尽管这不是万无一失的)。命令行如下:

^{pr2}$

这将把它从Python2.x代码转换为3.x代码,并重新编写源文件。在

附录2

传递file对象的代码应该是“f”变量,如上所示(修改后表示这个变量;我没有注意,只是在参数中保留了旧的file函数调用)。在

还需要将URI传递给函数:

ABPFilter.match(URI)

您需要修改代码以将这些项传递到数组中(至少我是这样认为的);我现在正在使用它看看。Python在处理错误时使用的不是错误abpy.py,这很好,因为这表明这是正确的思路)。在

代码筛选器.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”参数。您将正则化HTML(这可能是相当密集的)为一个uri列表,然后通过匹配循环运行每个项,从那里开始实际过滤节点,我不确定;但是有一个过滤器类型的列表,所以我假设有一个典型的ABP过程来删除节点(可能,在某些情况下,只需从HTML中删除给定的URI在

References

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

相关问题 更多 >