- A+
我差不多用了一年的时间,陆陆续续将一些SEO最常见的技术需求片段,写入了一个模块之中。目前为止,这个模块的完善程度,已经做到可以节省我日常的大部分代码量。
比如最典型的例子,查排名。用Python最基础的实现,也要加载urllib模块先将关键词编码,再urllib2模块下载网页,re模块提取搜索结果,再遍历匹配想要的结果,最少也要十来行代码。
进一步的,如果想要做到可以稳定查询、定制更多的功能,代码量就更多了。在我的模块中,达到了近百行的代码。一般情况下,没人可以接受查个关键词排名要写如此多的代码。
但借助该模块,一切变得非常简单,加载模块后只需一行代码即可输出排名:
# coding:utf-8
from seoqx import *
baidu_rank(‘招聘’, host=’.ganji.com’)
模块的下载地址为:http://www.seoqx.com/seoqx.pyc(2014年10月28日注:之前的下载链接不可用,刚问ZERO要的新链接。)
为保证后续不再出现下载地址丢失的情况,我上传了一传到空间里,需要的朋友点此下载。
注意事项:需要先安装pycurl模块,该模块才能运作。此外适用的Python版本为2.7.3,对于其它版本可能会存在bug。
以下为其具体介绍:
# coding:utf-8
from seoqx import *
'''
baidu_rank(kw, host=None, lp=None, rn=100, pn=0)
查询百度关键词排名
指定某个域名,或是精确到某个着陆页
默认查询前100名,也可以通过设置rn, pn参数来遍历760个结果,或只查前10名
若查询过程中出现验证码,会自动间隔10分钟再次尝试查询
'''
print baidu_rank('招聘', host='.ganji.com')
# 输出: (8, 'http://bj.ganji.com/zhaopin/')
print baidu_rank('招聘', lp='http://www.ganji.com/zhaopin/')
# 输出: 47
'''
baidu_index(url)
查询网页是否被百度收录
输出1为被收录,0为没有收录
若查询过程中出现验证码,会自动间隔10分钟再次尝试查询
'''
print baidu_index('http://bj.ganji.com/zhaopin/')
# 输出: 1
print baidu_index('http://bjbj.ganji.com/zhaopin/')
# 输出: 0
'''
root_domain(url)
通过URL获取根域名
'''
print root_domain('http://www.xxx.com.cn/')
# 输出: xxx.com.cn
'''
date_range(start, end, only_monday=False, input_format='%y%m%d', output_format='%y%m%d')
输出两个时间点之间的各个时间点,主要用于流量趋势分析等场景
如果指定only_monday为True,仅输出为周一的时间点
start, end可以接受字符串,也可以是数字
'''
print date_range(140227, 140305)
# 输出: ['140227', '140228', '140301', '140302', '140303', '140304', '140305']
print date_range('140227', '140305', only_monday=True, output_format='%Y-%m-%d')
# 输出: ['2014-03-03']
'''
curl(url, **kwargs)
下载网页,在保证多数功能可用的情况下,大幅简化了pycurl的使用
默认情况下已做了一部分基础的防采集措施,如设置UserAgent
**kwargs可接受setopt设置的参数
'''
print curl('http://www.baidu.com/')
# 输出: 该网页的源代码
print curl('http://www.baidu.com/', FOLLOWLOCATION=False)
'''
辅助用途的类,主要用于top-n的计算与排序
class dict_plus(dict):
def sort(self, reverse=True):
return sorted(self.iteritems(), key=lambda d:d[1], reverse=reverse)
def add(self, key, value=1):
self[key] = self.get(key, 0) + value
'''
visits_log = '''www /1.htm 租房
www /2.htm 招聘
www /1.htm 租房'''
kws = dict_plus()
for line in visits_log.splitlines():
host, url, kw = line.rstrip().split('\t', 2)
kws.add(kw)
for kw, v in kws.sort()[:2]:
print kw, v
'''
输出:
租房 2
招聘 1
'''