logo一言堂

中文网页资料的分享

互联网的一个重要作用是信息发布和分享。你只要有一个链接,任何人点这个链接都会分享到同样的信息。当然,有些信息受到保护,需要登录才能看到,这也可以理解。本文谈的只包括对公众开放的信息,即可以链接分享的公开信息。今天我调查了四个常见中文信息来源:

今日头条

今日头条到今天已经是巨无霸级别,上面有海量的信息,某些颇有价值,相当一部分在别的地方找不到。这些海量信息你无需使用APP,也无需登录,只用浏览器就可以看到,链接简洁明了,例如:https://www.toutiao.com/i6853032117417443840/.

下面说缺点。

用户跟踪

这是我见过所有网站中,cookie用量最大的之一。一次访问,你的浏览器就被植入11个cookie,还不包括少量第三方cookie。你就是匿名访问,头条也很努力地想弄清楚你是谁。

无标准meta

在社交媒体分享的时候,假如网页有若干标准化meta标签的话,渠道和对方可以先期了解链接的一些信息,例如缩略图,标题,摘要,媒体格式等等。业界两个标准一个是来自facebook的Open Graph, 另一个是来自Twitter的Twitter card. 头条都没有。就算你放弃标准,试图解析头条HTML内容,也找不到任何有用的元数据。所以,在非头条支持的社交媒体上,例如whatsapp,telegram等,头条链接都是干巴巴的链接。在微信上当然不是,这是由于微信和头条的协作关系,用api生成的。

javascript超强依赖

我自己写了个爬虫,试图分析一下头条链接内容。但是,我很快放弃了。因为什么都没有 . 头条链接内容虽然在浏览器里打得开,但在程序自动抓取情况下,什么都没有,一片空白。我一开始还以为是某种网络限制,或user agent检查,但后来我意识到,这全是javascript的魔法。你点的任何头条链接,包括头条主页 ,其实给你传的都是一样的一个javascript程序,所有内容,包括标题,都由javascript二次下载。你如果不信,可以在浏览器里禁用javascript试试。当然,在今天javascript是网上浏览不可或缺的东西,但一般网站,尤其是信息发布性网站,至少会有一点文字信息不依赖javascript,只有头条做的够绝。

这个后果之一就是所有搜索引擎,除了头条自己的之外,都无法索引头条上的信息。我知道头条在推自己的搜索引擎,但是作为用户来说,在头条发布信息,就是断绝了其他一切流量可能,你所有的流量都来自头条自己。头条网站根目录的robots.txt说的够直白:

User-agent: *
Disallow: /

爬虫请靠边站。

微信公众号

微信公众号也是规模庞大的信息发布平台。在一些领域,其实已经是垄断级别,而且和国内唯一最大的社交网络深度绑定,你不可能忽略它。公众号的文章内容除了在微信内部可以阅读,其链接也可以分享,通过普通浏览器匿名访问。当然,和微信的互动,如订阅,微信内分享,运行小程序是不行的,这也是可以预计到的。

下面说缺点。

超长链接

微信链接通常长这样:https://mp.weixin.qq.com/s?__biz=MzA4NjMzNTEwMw==&mid=2653630285&idx=1&sn=fc50fe1d1fbf56a1bc1a0784cfe980a1&chksm=8415c45db3624d4ba56273c3d2af0d1e70b5f405d51d6f2bd3768bbe6be114efd2de140c53f7. 带劲吧?实际上,如果你看的懂query string,这里最后的参数chksm其实是不必要的。但你分享出来就是这个鬼样子。当然,微信后台也会在浏览器里植入cookie来试图跟踪你,但貌似跟踪的力度不如头条。

meta不标准

微信公众号文章其实包含 OpenGraph 和 Twitter card, 但是是有问题的。例如:

  <meta property="og:url" content="http://mp.weixin.qq.com/s?__biz=MzA4NjMzNTEwMw==&amp;mid=2653630285&amp;idx=1&amp;sn=fc50fe1d1fbf56a1bc1a0784cfe980a1&amp;chksm=8415c45db3624d4ba56273c3d2af0d1e70b5f405d51d6f2bd3768bbe6be114efd2de140c53f7#rd" />
  <meta property="og:image" content="http://mmbiz.qpic.cn/mmbiz_jpg/ibvjqYe1KOjBwFAj7MXVhGat6icJuyNefugzAtDw88tiaRCc2DqkEbLet3PU2sewCRfJmKvexVJYsWTvm8yicMSx0A/0?wx_fmt=jpeg" />

这个问题就在于链接是http而不是https,虽然我用浏览器访问的方式是https. 根据互联网规范,https网页不能内嵌非加密信息。搞笑的是假如你通过http去加载这个图片的话,微信服务器会返回HTTP301,把你再重定向到同一个服务器,同一个路径下的https链接上。所以说,微信的这些meta是写错了。

Javascript 强依赖

和头条一样,微信公众号文章不开Javascript也读不了。但稍微好一点的是,虽然内容没有,但是标题,和 opengraph meta 还是有的,所以你至少不是在看一个白板。对于爬虫分析来说,也有点信息,不至于什么都看不到。我估计各种搜索引擎还是有所覆盖的。

百度知道

百度知道是百度自己的公众问题解答网站,有些解答还是不错的。何况是百度自己人,所以在百度搜索排名都很高,不管你搜个什么,前几名必然有百度知道链接。当然,你分享链接后别人匿名访问,其实也不是那么匿名。除了百度cookie之外,百度知道自己还有自己的cookie。

先说优点:

不依赖 Javascript

你就算关掉Javascript,百度知道还是一个样子,所有内容都呈现。这里必须给个大大的好评。关掉javascript,百度就完全不能跟踪你是谁了,最多知道你的IP什么的。另外,这对搜索引擎也是大利好。毕竟百度是开这个的。

再说缺点:

无任何标准meta

和头条一样,百度知道完全没有Open Graph, Twitter Card之类的一切都没有,连link rel=canonical都没有。假如社交分享这种链接就肯定什么都没有了。分析meta的时候我还发现了一个重大信息:

GBK charset

光用浏览器一般看不出来,但百度知道所有网页都还是GBK编码,而不是国际通用的UTF-8编码。有点不可思议,毕竟百度旗下其他几个网站,包括搜索都早就是UTF-8的了。这里简单介绍一下,GBK是GB2312的扩展,包含中英文还有日文假名之类字符。UTF-8是现在的国际标准,包含一切。这意味着百度知道不能使用例如:😓, 💔 之类的字符,也不能用一些小众一点的语言。

这还不是最关键的。GBK支持在各种新型编程环境中基本不存在,当然,在古典语言例如C里也不存在,但那里毕竟可以用古代的第三方库,而二十一世纪的快捷编程环境通常已经假定字符串是UTF-8了,也没有什么库可以用。我写的爬虫程序自然也无法支持。

黄页88

黄页88是国内流行的B2B信息发布平台。样子虽然有点九十年代,但信息量还是不小,主要是各种中小企业广告,无需登录就可以浏览。所有链接都可以自由分享。

先说优点:

相当完备的 Opengraph meta

这是我见过除了facebook自己之外,对Opengraph支持最全的信息网站了。你分享的链接一定很漂亮。例如这个:

huangye88
huangye88

上图来自iframely.com的demo. 我没有付费,不好意思直接链接。

不依赖 Javascript

关掉Javascript,你唯一失去的就是第三方广告,整个网页甚至更漂亮了。各种搜索引擎想必都能轻松接入。

再说缺点:

Opengraph 有瑕疵

这似乎也不仅仅是opengraph的问题,黄页88有大量的图,大多数的图来自https, 仍有少量来自http, 没有端到端保护。opengraph meta里的链接也都是http 的。我试了几个图和链接,把链接替换成https 其实是照样工作的。和微信类似,但不同的是没有自动http -> https 跳转。在这个年代,加密已经是主流,既然已经做到九成了,何必不做到十成,图个干净?

总结

一句话总结以上网站:

  • 黄页88:我很土,但我很努力
  • 百度知道:还活在2000年
  • 微信公众号:制霸中国,节操尚存
  • 今日头条:不是我的人,就是我的敌人