Skip to content

bcaso/Computer-Science-Whitelist

Repository files navigation

Computer-Science-Whitelist

Table of contents

introduction

垃圾站点越来越多,而黑名单是无限的,白名单可以是有限的,以有限的精力去维护有限的白名单,于是这个白名单就这么出来了。

这个名单只收集问答论坛,和类似 wiki 的高质量内容网站。

名单整理,用数据库(sqlite3)比较方便,从数据库中读取所有的表。合并成一个字典。然后使用这个字典生成 txt, xml 到 whitelists/.

# 表结构:

CREATE TABLE "table_name_1" ( "domain" TEXT NOT NULL,
  "prefix" TEXT NOT NULL DEFAULT '',
  "suffix" TEXT NOT NULL DEFAULT '',
  "score" NUMERIC NOT NULL DEFAULT 0.3,
  "description" TEXT NOT NULL DEFAULT '',
  PRIMARY KEY ("domain")
);

# 最外面的字典看作是数据库,其中每一个键值对就是一张表
whitelist_dics{ 
    table_name_1:{
        domain_name_1: [prefix, suffix, score, description],
        domain_name_2: [prefix, suffix, score, description],
    },
    table_name_2:{
        domain_name_1: [prefix, suffix, score, description],
        domain_name_2: [prefix, suffix, score, description],
    },
}

目录结构:

.
├── html
│   ├── cse_google_nginx_conf
│   └── index.html
├── main.py
├── README.md
├── whitelists
│   ├── annotations.xml
│   ├── bbs.txt
│   ├── blogs.txt
│   ├── cse.xml
│   ├── cse_FacetLabels.xml
│   ├── domain_name.txt
│   ├── library.txt
│   ├── repository.txt
│   ├── software.txt
│   ├── video.txt
│   ├── whitelist.txt
│   ├── whitelists_combined.txt
│   └── wiki.txt
└── whitelists.db

2 directories, 18 files

使用与调试:

先用自定义搜索,如果添加了知识实体,那结果将会被严格限制,如,添加 Computer Science,在搜索 "辱骂" 一词时给出的也多为 "辱骂检测技术",不会显示社会热点。

如果没有想要的结果,再点击页面最下方的 Search for [关键词] on Google,使用 uBlacklist 的白名单对 Google 的搜索结果进行过滤,如果还没有想要的结果,点击 Show 显示被过滤的网站,找到比较不错的网站,再添加到白名单中。

google programmable search engine

配置: ./whitelists/cse.xml

名单: ./whitelists/annotations.xml

在高级选项中上传:

cse.xml 可设项有些多,在网页上修改比较简单。

测试链接:https://cse.google.com/cse?cx=e9a1e480e37a86080

使用的知识实体为:Stack Exchange, Mathematics, Computer Science, Software development, Electronic engineering

搜索关键词,在链接最后加上 &q=, 如 https://cse.google.com/cse?cx=e9a1e480e37a86080&q=

sort

根据分数或权重排序:

只给 Annotation 添加 score 属性就可以对其排序,value from -1.0 to 1.0

可以在 socre 的基础上给 Label 标签排序,使用 weight 字段,value from -1.0 to 1.0

weight > score

一级排序:

为不同的 Label 排序,在 cse.xml 中添加标签(Label)并设置权重(weight, from -1.0 to 1.0)

示例:

<CustomSearchEngine>
  <Title>My Search</Title>
  <Context>
    <Facet>
      <FacetItem>
        <Label name="wiki" mode="FILTER" weight="1" enable_for_facet_search="true">
          <Rewrite/>
          <entities/>
        </Label>
        <Title>wiki</Title>
      </FacetItem>
      <FacetItem>
        <Label name="bbs" mode="FILTER" weight="0.8" enable_for_facet_search="true">
          <Rewrite/>
          <entities/>
        </Label>
        <Title>bbs</Title>
      </FacetItem>
    </Facet>
    <BackgroundLabels>
      <Label name="_include_" mode="FILTER"/>
      <Label name="_exclude_" mode="ELIMINATE"/>
    </BackgroundLabels>
  </Context>
...

上述文件中有两个 Label 分别是 wiki, bbs,其权重分别为 1.0, 0.8

这两个标签下的所有 Annotation 都以这个为排序,每个 Annotation 可以多个 Label。

当 Rewrite 中有内容且没有任何网址拥有这些标签时,对应的 Label 的 mode 只能选 BOOST,不然搜索结果中,该标签下不会有结果

二级排序(标签内部微调):

在 annotations.xml 中为每一个 Annotation 的 Label 添加 score 属性,值同样是 from -1.0 to 1.0

示例:

<?xml version="1.0" encoding="UTF-8"?>
<Annotations start="0" num="84" total="84">
  <Annotation about="*.uptodown.com/*" score="0.8">
    <Label name="_include_"/>
    <Label name="software"/>
  </Annotation>
  <Annotation about="*.wenku.baidu.com/view*" score="0.7">
    <Label name="_include_"/>
    <Label name="library"/>
  </Annotation>
  <Annotation about="*.edu/*" score="0.3">
    <Label name="_include_"/>
    <Label name="blogs"/>
  </Annotation>
  <Annotation about="*.liaoxuefeng.com/wiki*" score="0.5">
    <Label name="_include_"/>
    <Label name="blogs"/>
  </Annotation>
</Annotations>

当 score <= 0 时,该地址可能不会出现在结果中,所以最小也应该设置为 0.01

sort by key

用于搜索结果的右侧下拉框。

Search features -> Advanced -> Results sorting

当点击 Add key 按钮时,在弹出的窗口中填入两个字段,Key 和 Label。其中 Key 是排序的代码,带有星号的 Label 是显示出的提示文字。

key label description
date Date date descending 以日期降序排序,默认就有的 key
relevance 以相关性排序,key 是 relevance,但必须留空,默认就有的 key
date-sdate:a date ascending date 是排序方式,sdate 是网页中实际使用的用来描述 date 的变量名,:a ascending 升序,默认是 hard sort
date:a:w date ascending weak 以日期软升序排序 ascending weak
date:a date ascending hard 强制以日期升序排序 ascending (hard default)
question-answercount:d:w question answercount descending weak 问题回答数量 descending weak
question-datecreated:d question datecreated descending hard 问题创建日期 descending (hard default)
answer-upvotecount:d answer upvotecount descending hard 回答赞同数量 descending (hard default),每个回答都有点赞数和踩数,不知道具体用哪一个

问题-回答数(弱降序),问题-赞同数(强降序) 适用于知乎, Stack Exchange 等问答论坛。

使用 structured data 字段排序

显示搜索结果的结构化数据: Search features -> Advanced -> Websearch Settings -> Structured Data in Results -> Enable

如下图:

如果要使用 Answer -> commentcount 来排序。

对应的 Key 是 answer-commentcount:danswer-commentcount:d:w, answer-commentcount:a, answer-commentcount:a:w

d 是 decending, a 是 ascending ,默认是 hard sort,可能损失相关性,后跟 :w 表示 weak sort

其他的一些可选 key

configuration

annotations.xml 文件说明:https://developers.google.com/custom-search/docs/annotations

annotations.xml 层级结构:

Annotations (root element)
    Annotation
        Label
        Comment (optional)

cse.xml 中的 CustomSearchEngine 的属性,只有 language, encoding, enable_promotions, autocompletions 是需要根据个人需要进行修改。

其他的字段,如 id, creator, cx_id 是固定的,不需要写在文件中,即使上传的 cse.xml 中没有这些,系统会自动生成。还有 last_update_time_millis 字段,也是系统自动生成的,不需要手动添加。

annotations.xml 中的 Annotations 的属性 start, num, total, 也是会自动生成,手动加上方便查看。timestamp, href, 是系统生成的,不需要手动添加。

如果一个 url 不是通过上传 annotations.xml 所添加,那么在高级选项下删除 annotations.xml 也不会将这个 url 移除

html

(1)修改样式,默认样式太窄了

(2)过滤广告

(3)一些其他的设置

ad filtering

.gsc-adBlock {display:none !important}

focus on input box

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Custom Search Engine</title>
  <script type="text/javascript">
    function focusFieldOne() {
      document.querySelector('input[name="search"]').focus()
    }
  </script>
  <style>
    /*  Google Adsense  */
    .gsc-adBlock {display:none !important}
  </style>
</head>
<body onload="focusFieldOne()">
  <script async src="https://cse.google.com/cse.js?cx=[Your search ID]"></script>
  <div class="gcse-search"></div>
</body>
</html>

app.netlify.com 可以部署 github 上的静态网页,效果:https://computer-science-whitelist.netlify.app

TinyGoogle

https://github.com/bcaso/TinyGoogle

Features:

  • Search content by Google Custom Search API
  • No annoying google captcha

问题:没有标签页分类

image

ublacklist

introduction of ublacklist

PC 浏览器(Chrome, Firefox, Edge, Safair(支持移动端))插件。

uBlacklist 目前支持搜索引擎有 Google, Bing, DuckDuckgo, Ecosia, Startpage, Qwant

可使用油猴本 AC-重定向 将搜索结果多列显示。

whitelist mode

插件本是针对垃圾网站进行过滤,也就是黑名单模式,修改下使用方式就能实现白名单过滤。

黑名单规则总是优于白名单生效,所以可以先添加规则 *://*/* 以屏蔽所有网址,然后添加 @:*//前缀.域名.后缀(如 @:*//*.github.com/*, 区分大小写) 取消对某个网站的过滤。

规则举例:

# 有前缀
@:*//*.github.com/*

# 没前缀
@:*//github.com/*

# 不完整的后缀
@*://*.docin.com/p-*
@*://*.doc88.com/p-*
@*://*.taodocs.com/p-*

# 完整的后缀
@*://*.appinn.com/*

通过前后缀区分一个地址的类型。

使用"最长前缀匹配规则", 过滤奇怪的结果,或者不相关结果。

规则是从左往右匹配的。

如,脚本之家:

https://www.jb51.net/                             电脑端
https://m.jb51.net/                               移动端
https://www.jb51.net/list/index_96.htm          脚本专栏
https://www.jb51.net/os/win11/808733.html     某个教程页
https://www.jb51.net/softs/794768.html    某个软件下载页

只索引它的软件下载页, 规则:@*://*.jb51.net/softs*,就能过滤掉其他页面。

后缀匹配的规则,如 @*://*.edu/*

修改搜索设置,将搜索结果数调得尽可能大,白名单模式会使得每一搜索页中的内容变得特别少, 因为符合白名单的网站,可能不在结果的第一页。

自动翻页插件: uAutoPagerize, 以及油猴脚本 东方永动机 可以在自动翻页的同时过滤搜索结果。

subscription rules

为保证白名单生效,先订阅 whitelist.txt

点击添加订阅whitelist

再分类订阅:

  1. wiki
  2. 仓库
  3. 博客
  4. 论坛
  5. 软件下载站
  6. 文库
  7. 视频

或者不分类,直接订阅总列表: 汇总列表

以上链接会自动打开 chrome 上的 uBlacklist 插件,同时添加订阅。

分类订阅比订阅总列表的可控度高,根据内容需要,可在搜索前只启用一部分:

other ways of using it

域名列表: ./whitelists/domain_name.txt ,在油猴脚本中改下判断规则代码就可以使用。

这个文件中的名单规则也是 cse.google.com 的规则,可以批量添加,只有列表,没有分数排序,没有标签页分类,删除时最多只能一次删除10个。

在 cse.google.com 的 Setup 下,复制该文件中的所有内容,粘贴到 Sites to search -> Add -> Include sites in bulk 的文本编辑框中。选择 Include just the specific pages I have entered. 然后点击保存。

可以在导入名单后,在高级选项中导出 annotations.xml。然后慢慢清空所有的列表,再上传 annotations.xml。列表管理用 annotations.xml 更方便,如果一个 url 不是通过上传 annotations.xml 所添加(手动添加),那么在高级选项下删除 annotations.xml 也不会将这个 url 移除,只能一点点的删除。

可以上传多个 annotations.xml,所以可以通过文件分类。

reference

Google I/O 2009 - Advanced Custom Search Configuration https://www.youtube.com/watch?v=fIUHTFvIt9c

google cse documentation https://developers.google.com/custom-search/docs/overview

Gaga for Google Custom Search Engines https://www.youtube.com/watch?v=uX5nbIHRTAo

Google Custom Search Engines | Sourcing https://www.youtube.com/watch?v=t1szVhH5dIo

uBlacklist 黑名单规则 github.com/cobaltdisco/Google-Chinese-Results-Blocklist

About

Google 搜索结果中垃圾站点越来越多,于是这个白名单就这么出来了。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published