源码论坛,商业源码下载,尽在锦尚中国商业源码论坛

标题: 全自动监控网站关键词排名(Python实现) [打印本页]

作者: andi_huang    时间: 2012-4-18 21:29
标题: 全自动监控网站关键词排名(Python实现)
  百度权重查询 站长买卖 友谊链接交流 网站建立,网站设计,企业建站就找313  从这篇文章开端不计划再破费少量精神去写顺序自身的知识,毕竟是各类书籍上有的内容。其他次要需求学习的是内置函数的运用,和一些模块的运用方式,尤其是pycurl,re,threading这些需求渐渐熟习起来。

  若在学习中有不解的地方,在文章评论中可以提出,假如有空会尽力帮助解答。  顺序需求

  关于稍大的一个网站,往往会有许多关键词需求每隔一个周期监控它们的排名,以剖析SEO(搜索引擎优化)效果的好坏,及判别百度Google的意向等等。  有一个关键在于数据的搜集全自动与否的成绩。若常常用Google  Analytics剖析数据的话应该会觉得到,数据剖析的需求是多种多样的,只要事前曾经有了完善的各个维度的数据当前,才干随着最后的想法停止剖析,而不会为数据的匮乏所局限。像Google  Analytics这样出色的工具完全自动的将这些数据搜集了起来,才给SEO(搜索引擎优化)关于流量的多样化剖析打下了根底。异样的,假如想剖析的时分更自在的话,就需求记载尽多品种的历史数据,假如这些作为每日任务,那将耗时十分长,所以自动化的搜集就表现出了其重要性。

  现有的监控排名次要处理方案是运用商业软件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,Google每天可以查询5000 词,百度则可以查询数万的词)。而且数据自身,次要为关键词、排名、着陆页URL这几项,文件体积很小,所以每天都保管一份数据。

  数据的贮存方式上,此时普通建议选择csv。它和Excel表格(xls)在数据的贮存方式上是如出一辙的。  代码完成

  这些代码需求以下运转环境:  Linux操作零碎

  Python的第三方模块pycurl  Python下载网页的最复杂方式是:

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

  但urllib2模块自身功用虽然还行,却仍离pycurl模块有较大间隔。且在做略微复杂一些的操作时,pycurl模块运用起来比urllib2模块方便很多。pycurl是必需要纯熟运用的模块之一,但也由于它上手能够会让人有摇头疼,这里我本人写了一个模块,以此即可方便的运用它:  from pycurl import *

  import StringIO, time, random  def curl(url, retry=False, delay=1, **kwargs):

  \'\'\'Basic usage: curl(\'http:// www. xxx.com/\'), 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\')  \'\'\'

  useragent_list = [  \'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725  Firefox/2.0.0.6\',

  \'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\',  \'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET  CLR 2.0.50727; .NET CLR 3.0.04506.30)\',

  \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\',  \'Opera/9.20 (Windows NT 6.0; U; en)\',

  \'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1; .NET CLR 1.1.4322)\',  \'Opera/9.00 (Windows NT 5.1; U; en)\',

  \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50\',  \'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.0\',

  \'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02  [en]\',  \'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127  Netscape/8.1\',

  ]  size = len(useragent_list)

  useragent = useragent_list[random.randint(0, size-1)]  s = StringIO.StringIO()

  c = Curl()  c.setopt(NOSIGNAL, True)

  c.setopt(FOLLOWLOCATION, True)  c.setopt(MAXREDIRS, 5)

  c.setopt(TIMEOUT, 120)  for key in kwargs:

  c.setopt(locals()[key], kwargs[key])  c.setopt(URL, url)

  c.setopt(WRITEFUNCTION, s.write)  if ‘USERAGENT’ not in kwargs:

  c.setopt(USERAGENT, useragent)  if ‘REFERER’ not in kwargs:

  c.setopt(REFERER, url)  while 1:

  try:  c.perform()

  break  except:

  if retry:  time.sleep(delay)

  else:  return False

  return s.getvalue()  关于复杂的采集外面需求用到的下载功用,曾经被整合在了这个模块之中。如User-agent轮换、自动301/302跳转等、运用以后URL作为REFERER的有些取巧的办法等。这个模块的代码可以日后再渐渐了解,如今只需晓得它的用法即可。

  首先到放置Python脚本的目录,将后面一段代码保管为curl.py,然后在同一目录下创立一个新文件,输出以下测试代码:  # -*- coding:utf-8 -*-

  import curl  print curl.curl(\'http:// g.cn/\') #这样即下载了一个网页

  #以下是比拟保险的下载方式,由于各种缘由,就算总体很波动的网站也偶然会呈现网页暂时无法翻开的状况  #当网页下载出错时,假如retry为True,则会不时重试,直到下载完网页

  #delay则指定了几次重试之间的工夫距离,以秒为单位  print curl.curl(\'http:// g.cn/\', retry=True, delay=1)

  #以下用到了一些Curl的参数,详细阐明可见:http:// curl.haxx.se/libcurl/c/curl_easy_setopt.html  print curl.curl(\'http:// g.cn/\', FOLLOWLOCATION=False, COOKIE=\'mycookie\')

  这个模块会在当前简直每个脚本外面都用到,所以这些根底用法务必牢记。

以上是溧水114网http://www.ls114.com  南京114 http://www.nj114.cn 整理发布,转载请注明





欢迎光临 源码论坛,商业源码下载,尽在锦尚中国商业源码论坛 (https://bbs.52jscn.com/) Powered by Discuz! X3.3