CSS3教程

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

字号+ 作者:建站教程网 来源:建站教程网 2012-04-18 20:43 我要评论( )

首先到放置Python脚本的目录,将前面一段代码保存为curl.py,然后在同一目录下创建一个新文件,输入以下测试代码: # -*- coding:utf-8 -*- import curl print curl.curl('http://g.cn/') #这样即下载了一个网页 #

首先到放置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的参数,详细说明可见:

print curl.curl('http://g.cn/', FOLLOWLOCATION=False, COOKIE='mycookie')

这个模块会在以后几乎每个脚本里面都用到,所以这些基础用法务必牢记。接下来是监控网站关键词排名的正式代码:

cron.py

# -*- coding:utf-8 -*-

#加载模块,此处大致按功能划分行,是为了能够更方便理解代码

import sys, os, random, time, datetime

import urllib, re

import curl

#sys.argv是系统参数,1:3切片意味着读取参数2,3,分别赋值给两个变量

site, file_keyword = sys.argv[1:3]

keywords = [] #先将keywords声明初始为列表型变量

#迭代文件,每次读取一行文字

for line in open(file_keyword):

line = line.rstrip() #将行尾的空白字符去掉,一般行尾会有换行符等

if line:#判断该行是否是空白行,也可更标准的写作if len(line)!=0:

keywords.append(line) #将读取到的文字加入到keywords列表中

#获取UTC时间,之所以使用UTC时间是为了避免时区问题带来的未知麻烦

#北京时间是UTC+8,如该日UTC时间01:00相当于北京时间09:00

now = datetime.datetime.utcnow()

#将UTC时间格式化,变成如1970-01-01的格式

date = datetime.datetime.strftime(now, '%Y-%m-%d')

#尝试创建文件夹,如果文件夹已创建则跳过

try:

os.mkdir('/home/rank/')

except:

pass

#打开输出数据的文件,以当日的日期命名它

f = open('/home/rank/%s.csv' % date, 'w')

for keyword in keywords:

#因为关键词可能是非ASCII字符集的,所以需要编码

encoded_keyword = urllib.quote_plus(keyword)

#下载SERP并提取链接

url = 'http://www.baidu.com/s?wd=%s&rn=100' % encoded_keyword

#下载SERP,如果出现验证码即延时10分钟并重试

while 1:

html = curl.curl(url, retry=True, delay=60)

if '<img src="http://verify.baidu.com/cgi-bin/' in html:

except:

f.write('%s\t%d\t%s\n' % (keyword, -1, '-'))

continue

#如果在前100名找到网站,则find=True

find = False

#在SERP上面的URL中,寻找网站并确定排名

for pos, url in enumerate(urls, 1):

if site in url:

f.write('%s\t%d\t%s\n' % (keyword, pos, url))

find = True

break

#如果前100名没有找到网站

if not find: #更标准的写法是if find==False:

f.write('%s\t%d\t%s\n' % (keyword, -1, '-'))

delay = random.randint(1,2) #随机设定延时时间为1秒或2秒

time.sleep(delay) #等待x秒以后继续查询下一个词的排名

这段代码即可监控排名并收集数据。它的使用命令如:python cron.py semwatch.org keywords.txt

在运行之前,先要把关键词按行分隔,保存成txt文件,并在运行参数中让脚本去读取它。每次运行之后,会在/home/rank/文件夹下,创建一个类似1970-01-01.csv这样文件名的文件,保存着当日的关键词排名情况。

(责任编辑:sunsun)

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 内容除了原创与相关性 我们还要注意什么?

    内容除了原创与相关性 我们还要注意什么?

    2014-11-14 17:36

  • 该如何在论坛发布外链?

    该如何在论坛发布外链?

    2014-11-14 17:30

  • 浅谈传统企业网站一些关于SEO方面的问题

    浅谈传统企业网站一些关于SEO方面的问题

    2014-11-14 17:29

  • 社区网站存在的问题有哪些?

    社区网站存在的问题有哪些?

    2014-11-14 17:29

网友点评