首先到放置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)