博客社会学图-使用python检索网页上的友情链接

前言

最近蹲办公室无聊,我突发奇想的想要分析下互联网个人独立博客相互之间的社会联系。于是着手收集各个博客之间的链接,并绘制博客之间的社会关系网络分析图。(画图部分的代码尚未优化完毕,暂不公开)
python-search-friend-links-0
本文是其中友情链接检索部分的思路与源码。
Ps:源码于2013-09-18日大幅度更新

友情链接的定义

独立博客中一般有三部分存在外部链接,一为文章正文部分,二为博客框架及小工具部分,三为文章评论部分。

  1. 博客框架及小工具部分的外部链接,就是通常意义上的友情链接;
  2. 正文部分的外部链接,有些是正文文字附带的,一般直接给予一个<a>属性,另一部分则是文字引用的出处或参考文献,我也将其视为友链;
  3. 鉴于大部分博客的评论部分均采用javascript方式加载,来访者的留言信息中的url不会在网页源码中体现出来,因python获取网页源码不会解析js脚本,评论区不会影响结果,故这部分可以忽略。

在本文中,为方便起见,我简单的将一个独立博客首页所有上述类型的外部链接视为友情链接。

友情链接的格式

仔细分析这些连接,可以发现,为了使其排列,源码中都会通过<li>进行定义。

这样一来就方便多了,直接使用简单的正则提取:<li><a href=”.+?”>.+?</a></li>

因为有些链接会有额外的属性,有些没有,而且还有些会把属性放到href前面;同时为了方便提取元素加上俩子表达式,所以正则表达式最后改为:<li><a .*?href=”(.+?)”.*?>(.+?)</a></li>

友情链接的判断

鉴于部分内容存在内部链接,则还需要判断检索结果是否是其它网站的。这个简单,在检索到的链接与本博客链接之间,判断其域名是否相同就可以了。

检索代码的身份

在完成这部分代码后,结果测试程序一直异常退出,看着console中的一片红色警告,我瞧着最后的那句“urllib2.HTTPError: HTTP Error 403: Forbidden”异常眼熟,这不就是403错误嘛。

查了查原因,原来是我的博客//blog.leniy.org/某安全插件禁止了一些奇怪的UserAgent,而python的urllib2获取网站内容时的默认UA恰恰在里面,自然服务器会拒绝了。

要解决这个问题,自然是伪装一下UA了。我选择的是“Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5”。

最终的代码(2012.11版本)

最终,代码成功运行。因为我的博客没有友情链接,就采用根域名作为种子了。

运行结果如下:

成功执行。

最终的代码(2013.09版本)

运行结果如下:
python-search-friend-links-20130918
成功执行。

后台执行

我把这部分代码上传到了vps上,为了保证获得足够的数据量,我把最后面代码中的for循环改为了死循环。然后通过screen命令运行,这样就可以关闭ssh后也可以后台运行了。

发布者

Leniy

Do not , for one repulse , give up the purpose that you resolved to effect . 本文著作版权归Leniy所有,并受法律保护。 转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。 CopyRight © 2006-2017 Leniy.org all rights reserved.

《博客社会学图-使用python检索网页上的友情链接》有126个想法

        1. 这个对流量的消耗太大了,还是在自己的电脑上测试为好,对vps负载太大。另外咨询下,你知道怎么导出sunpinyin的自定义词库么?

                1. 我的主机除了cron中执行一个自己写的脚本每天签到外,就没有别的流入流量了

                    1. 超级QQ。每天手机QQ登陆一次可以加速1.6倍等级,每天管理中心后台签到一次可以领取积分加速超级QQ本身升级

                    2. 因为我很少手机上QQ,平时又想不起来领积分,就写了个脚本每天执行一次,模拟人工操作

    1. 我都是10点之前睡觉的,你休息的好晚。不过新疆的话貌似这个时间很正常

    1. 有可能你打开的时候正好赶上本页面清空缓存并重新建立。这个时候博客打开变慢很多

发表评论

电子邮件地址不会被公开。 必填项已用*标注