会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 搜索引擎 > 全自动监控网站关头词排名(Python实现)

全自动监控网站关头词排名(Python实现)

时间:2012-04-17 20:01:13   作者:   来源:   点击:

从这篇文章起头不筹算再破费年夜量精力去写法度自己的知识,事实成果是各类书籍上有的内容。其余主要需要学习的是内置函数的使用,和一些模块的使用体例,尤其是pycurl,re,threading这些需要慢慢熟悉起来。

若在学习中有不解的处所,在文章评论中可以提出,如果有空会极力辅佐解答。

法度需求

对稍年夜的一个网站,往往会有许多关头词需要每隔一个周期监控它们的排名,以阐发搜索引擎优化效果的吵嘴,及判断百度谷歌的动向等等。

有一个关头在于数据的收集全自动与否的问题。若经常常使用谷歌 Analytics阐发数据的话应该会感触感染到,数据阐发的需求是多种多样的,只有事先已经有了完善的各个维度的数据以后,才能随着最初的想法进行阐发,而不会为数据的匮乏所局限。像谷歌 Analytics这样超卓的东西完全自动的将这些数据收集了起来,才给搜索引擎优化对流量的多样化阐发打下了根本。同样的,如果想阐发的时候更自由的话,就需要记实尽多种类的汗青数据,如果这些作为每日工作,那将耗时很是长,所以自动化的收集就体现出了其重要性。

现有的监控排名主要解决方案是使用商业软件Rank Tracker,但它也有些不是很抱负的处所。比如对几近所有既有软件都存在的问题,功能不矫捷。别的它最年夜的短处之一在于它一定要找个具有图形界面的系统运行(因为它是Java实现的,有多操作系统版本,所以不一定是Windows)。

对DIY的Python脚本,在Linux系统里面可以将其放到crontab中(系统级打算任务),全自动的按时运行收集原始数据。然后在需要的时候,再用别的的脚原本措置原始数据,进行各个维度的阐发。所需的一般情况下为:Linux系统的低配置VPS一台,总共不逾越100行的Python代码(Windows也能实现这些,但相对比较麻烦)。

然后再来阐发更具体的需求。此处我总结了一些原则:

1. 除非数据量年夜到会对硬盘带来压力(比如每日数G的日志的阐发等),不然把能想到的尽多的数据都记实下来。因为阐发的需求是多变的,数据若全面便可有备无患。

2. 同上,除非数据量极年夜,不然务必把汗青数据全部保存下来。在年夜数据量的时候,也需要按实际情况保存一按时间区间的数据(打个例如,前3年每月保存一副本,昔时每周保存一副本)。汗青数据的对比在很多时候的意义很是年夜。

3. 当数据很是单一的时候,使用txt按行保存;当数据比较简单的时候,使用csv按行列贮存;当数据比较复杂的时候,可以斟酌使用MongoDB等key-value型NoSQL贮存;再复杂的时候,使用MySQL之类的关系性数据库贮存。但这些不是绝对的,仍是要看实际情况而定。

对目前的需求,因为是要监控关头词排名趋势,所以一般最多监控几千个关头词就够了。也许网站比较年夜,想体会数十万的关头词的排名,但对体会排名趋势的情况下,没需要全部查询,随机选取其中一小部分作为样本便可以了。

因为最多几千个关头词,所以最好每天记实一次它们的排名数据(包管稳定的情况下,对单IP,谷歌每天可以查询5000+词,百度则可以查询数万的词)。并且数据自己,主要为关头词、排名、着陆页URL这几项,文件体积很小,所以每天都保存一份数据。

数据的贮存体例上,此时一般建议选择csv。它和Excel表格(xls)在数据的贮存体例上是一模一样的。

代码实现

这些代码需要以下运行情况:

Linux操作系统

Python的第三方模块pycurl

Python下载网页的最简单体例是:

import urllib2

print urllib2.urlopen('http://***/').read()

但urllib2模块自己功能虽然还行,却仍离pycurl模块有较年夜距离。且在做稍微复杂一些的操作时,pycurl模块使用起来比urllib2模块便利很多。pycurl是必须要熟练运用的模块之一,但也因为它上手可能会让人有点头疼,这里我自己写了一个模块,以此便可便利的使用它:

from pycurl import *

import StringIO, time, random

def curl(url, retry=False, delay=1, **kwargs):

'''Basic usage: curl('.xxx/'), will download the url.

If set `retry` to True, when network error, it will retry automatically.

`delay` set the seconds to delay between every retry.

**kwargs can be curl params. For example:

curl(url, FOLLOWLOCATION=False, USERAGENT='Firefox')

分享到:

网友评论