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

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

作者: andi_huang    时间: 2012-4-19 01:54
标题: 全自动监控网站关键词排名(Python实现)
  从这篇文章开端不计划再破费少量精神去写顺序自身的知识,毕竟是各类书籍上有的内容。其他次要需求学习的是内置函数的运用,和一些模块的运用方式,尤其是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的有些取巧的办法等。这个模块的代码可以日后再渐渐了解,如今只需晓得它的用法即可。

  以上是由股票macd指标详解http://www.niulaile.com/tujiejiaocheng/整理发布,转载请注明。




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