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

站长资源综合门户

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

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

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

'''

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; CLR 1.1.4322; CLR 2.0.50727; CLR 3.0.04506.30)',

'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; CLR 1.1.4322)',

'Opera/9.20 (Windows NT 6.0; U; en)',

'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1; 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/') #这样即下载了一个网页

#以下是比较保险的下载体例,因为各类原因,就算总体很稳定的网站也偶尔会呈现网页暂时无法打开的情况

#当网页下载出错时,如果retry为True,则会不竭重试,直到下载完网页

#delay则指定了几次重试之间的时间距离,以秒为单位

print curl.curl('http://g/', retry=True, delay=1)

#以下用到了一些Curl的参数,详细说明可见:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html

print curl.curl('http://g/', 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 = datetimetime.utcnow()

#将UTC时间格局化,酿成如1970-01-01的格局

date = datetimetime.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 = '.百度/s?wd=%s&rn=100' % encoded_keyword

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

while 1:

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

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

except:

f.write('%st%dt%sn' % (keyword, -1, '-'))

continue

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

分享到:

网友评论