gpt4 book ai didi

Python 3.3 库 abpy,文件未定义

转载 作者:行者123 更新时间:2023-12-01 05:29:05 24 4
gpt4 key购买 nike

我正在使用Python的ABPY库(库here),但我认为它是旧版本。我正在使用Python 3.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)

现在它显示一个空白页面

最佳答案

刚刚看了一眼库,好像文件“easylist.txt”不存在;您需要创建该文件,并使用适当的过滤器填充它(以 ABP 指定的任何格式)。

此外,它似乎需要一个文件对象;尝试这样的事情:

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

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

附录#1

更深入地查看代码,我必须同意,即使我提供的修复确实有效,您也会遇到更多问题(正如您所建议的,当您使用 3 时,它是在 2.x 中) 。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(这可能相当密集)进行正则表达式,然后通过匹配循环运行每个项目。我不确定从那里开始实际过滤节点;但是有一个过滤器类型列表,所以我假设有一个典型的 ABP 程序来删除节点(可能在某些情况下只是通过从 HTML 中删除给定的 URI 来实现?)

References

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

关于Python 3.3 库 abpy,文件未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com