adblock plus规则分析器

adblockparser的Python项目详细描述


adblockparser

pypi version许可证生成状态代码覆盖率

adblockparser 是一个用于处理adblock plus过滤规则的包。 它可以解析adblock plus过滤器,并根据它们匹配url。

安装

pip install adblockparser

支持Python2.7和Python3.3+。

如果计划将此库与大量筛选器一起使用 强烈建议安装pyre2库:加速 对于默认值列表,easylist可以大于1000倍。

< Buff行情> pip安装're2>;=0.2.21'

注意PyRe2库需要C++ +Hyrf="HTTPS://GITHUBCOM/GoGoLe/Re2"Re="NoFoLoL>"> Re2库。 在OS X上,您可以使用自制程序( 安装RE2 )获得它。

用法

要了解adblock plus筛选器语法,请检查以下链接:

  1. 在某处获取过滤规则:手动编写,从文件中读取行 下载位置:easylist等:

    >>> raw_rules = [
    ...     "||ads.example.com^",
    ...     "@@||ads.example.com/notbanner^$~script",
    ... ]
    
  2. 从规则字符串创建 adblockrules 实例:

    >>> from adblockparser import AdblockRules
    >>> rules = AdblockRules(raw_rules)
    
  3. 使用此实例检查是否应阻止URL:

    >>> rules.should_block("http://ads.example.com")
    True
    

    除非传递带有选项值的dict,否则将忽略带有选项的规则:

    >>> rules.should_block("http://ads.example.com/notbanner")
    True
    >>> rules.should_block("http://ads.example.com/notbanner", {'script': False})
    False
    >>> rules.should_block("http://ads.example.com/notbanner", {'script': True})
    True
    

咨询adblock plus 文档 选项说明。这些选项允许编写依赖于 一些外部信息在url中不可用。

性能

regex发动机

adblockrules 类创建一个巨大的正则表达式来匹配 不要使用选项。 pyre2 库比stdlib的re工作得更好 有这样的正则表达式。如果已经安装了pyre2,则 adblockrules 应该工作得更快,而且速度会非常快-超过1000倍 在某些情况下。

有时pyre2会打印出 re2/dfa.cc:459:dfa内存不足:程序大小270515 mem 1713850 到stderr。 给re2库更多的内存来修复这个问题:

>>> rules = AdblockRules(raw_rules, use_re2=True, max_mem=512*1024*1024)  # doctest: +SKIP

确保您使用的是从pypi安装的re2 0 0.2.20,它不起作用。

使用选项分析规则

具有选项的规则当前在循环中逐个匹配。 此外,还会检查它们是否与用户传递的选项兼容: 例如,如果用户没有传递"script"选项(带有 true或 false 值),所有涉及 脚本的规则都将被丢弃。

如果你有成千上万这样的规则,这就太慢了。为了让它工作得更快, 在 adblockrules 构造函数中显式列出要支持的所有选项, 禁用跳过不支持的规则,并始终传递包含所有选项的dict 方法:

>>> rules = AdblockRules(
...    raw_rules,
...    supported_options=['script', 'domain'],
...    skip_unsupported_rules=False
... )
>>> options = {'script': False, 'domain': 'www.mystartpage.com'}
>>> rules.should_block("http://ads.example.com/notbanner", options)
False

这样,当 ADBlockRules 实例已创建。

限制

当前实现有一些已知的限制:

  • 忽略元素隐藏规则;
  • 将url与大量过滤器进行匹配可能比较慢, 尤其是如果未安装pyre2并且启用了许多过滤器选项,则 pyre2
  • 匹配大小写 不正确地支持筛选选项(忽略它);
  • 文档 不正确支持筛选选项;
  • 规则在分析之前未验证,因此无效规则可能会引发 不一致的异常或无提示的错误工作。

可以消除所有这些限制。欢迎拉取请求 如果你想让事情早点发生!

贡献

要运行测试,请安装tox并键入

tox

从源签出。

许可证是麻省理工学院的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java集合属性值   java字符串==运算符是否比较引用?   java是否存在过太多的ListView或适配器?   json获取java中类路径中下载的文件   我可以用java代码解决数据库并发问题吗?   在多个线程中使用forEach()或使用forEach()和lambdas进行java集合迭代   java输出JFrame中的整个循环   java禁用高度详细的日志记录   java在没有特定属性的对象中访问模型的值   java Smack xmpp建立连接   处理过时域对象引起的并发问题的java策略(Grails/GORM/Hibernate)   java从ObservableList中提取元素   使用图像进行java相似图像搜索   java ListView和图像:我快疯了   在Java中,如何从毫秒时间戳中提取一天的周期?   java我需要这样的设计,但我面临两个问题   java如何获取JGoodies FormLayout中的单元格大小   Spring引导生成的java War文件未部署到Weblogic 12c