自己做站点的时候,都看看收录和关键词排名什么的,所以打造的这个批量关键词查询工具。

#encoding:utf-8
import urllib,re,random,time,sys,StringIO,socket
try:
import pycurl
except:
pass
from bs4 import BeautifulSoup
score={1: 28.56,
2: 19.23,
3: 10.20,
4: 8.14,
5: 7.50,
6: 5.72,
7: 4.01,
8: 4.41,
9: 5.53,
10: 6.70,} #获取根域名,百度产品直接显示子域名
def root_domain(url):
if 'baidu.com' in url:
return url
else:
try:
url = url.replace('http://', '')
l = ['.com.cn', '.org.cn', '.net.cn', '.gov.cn']
for suffix in l:
if suffix in url:
return re.search('^(.*?\..*?)*([^.]+?\.[^.]+?\.[^.]+)', url).group(2)
return re.search('^(.*?\..*?)*([^.]+?\.[^.]+)', url).group(2)
except:
return '-' def curl(url, debug=False, **kwargs):
list=['Mozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36']
randhead=random.sample(list,1)
while 1:
try:
s = StringIO.StringIO()
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.REFERER, url)
c.setopt(pycurl.FOLLOWLOCATION, True)
c.setopt(pycurl.TIMEOUT, 60)
c.setopt(pycurl.ENCODING, 'gzip')
c.setopt(pycurl.USERAGENT, '%s'%randhead[0])
c.setopt(pycurl.NOSIGNAL, True)
c.setopt(pycurl.WRITEFUNCTION, s.write)
for k, v in kwargs.iteritems():
c.setopt(vars(pycurl)[k], v)
c.perform()
c.close()
return s.getvalue()
except:
if debug:
raise
continue def get_baidudata(keyword,rn):
search_url = 'http://www.baidu.com/s?wd=%s&rn=%d'%(urllib.quote(keyword),rn)
pagetext = curl(search_url) #获取百度搜索结果源代码 while 'http://verify.baidu.com' in pagetext: #判断 如果查询过程中出现验证码则提示并停止10分钟,然后重新查询
print u"查询过程出现验证码,休息10分钟",keyword
time.sleep(600)
pagetext = curl(search_url)
else:
soup = BeautifulSoup(pagetext)
data = soup.find_all("div",attrs={'class':'result c-container '})#提取自然排名结果
return data return def get_rank_data(keyword,rn):
data = get_baidudata(keyword,rn)#获取自然排名结果
items = {}
for result in data:
g = result.find_all("a",attrs={'class':'c-showurl'})#获取主域名
if g:
site=re.search(r'([a-zA-Z0-9\.\-]+)',g[0].text)
host = site.groups(1)[0]
host=root_domain(host)#获取根域名
rank = int(result['id'])#排名
if host not in items.keys():
items[host] = []
items[host].append(score[rank])
else:
items[host].append(score[rank])
return items#返回单个词前十数据 def get_keywords(filename):#读取关键词返回列表
kwfile = open(filename,'r')
keywords = kwfile.readline()
kw_list = []
while keywords:
kw = keywords.strip()
kw_list.append(kw)
keywords = kwfile.readline()
kwfile.close()
return kw_list def get_all_data(filename,rn):#单域名数据合并
kw_list = get_keywords(filename)
items = {}
for i,kw in enumerate(kw_list,1):
print i,kw
item = get_rank_data(kw,rn)
for host,rank in item.items():
if host not in items.keys():
items[host] = rank
else:
items[host].extend(rank)
return items def get_score(filename,rn):
data = get_all_data(filename,rn)
fh = open('score.csv','a+')
fh.write('host,kws,average_score,host_score,\n') for host,rank in data.items():
if host != None:
host = host.encode('utf-8')
else:
host = 'error page'
kws = len(rank)#关键词数
host_score = sum(rank)#总得分
average_score = host_score/kws#平均分
fh.write(host+','+str(kws)+','+str(average_score)+','+str(host_score)+'\n')
return if __name__=="__main__":
file=raw_input("请输入包含关键词的文件名:")

  

python打造批量关键词排名查询工具的更多相关文章

  1. python打造文件包含漏洞检测工具

    0x00前言: 做Hack the box的题.感觉那个平台得开个VIp 不然得凉.一天只能重置一次...mmp 做的那题毒药是文件包含漏洞的题,涉及到了某个工具 看的不错就开发了一个. 0x01代码 ...

  2. 第11章:使用Python打造MySQL专家系统

    1.Python语言高级特性 1).深入浅出Python生成器 1).生成器函数:与普通函数定义类似,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间挂 ...

  3. python打造seo必备工具-自动查询排名

    因为工作需要,利用业余时间开发的,可以查询百度排名+360排名工具,附上代码. #360搜索排名查询 # -*- coding=utf-8 -*- import requests from lxml ...

  4. Python + MySQL 批量查询百度收录

    做SEO的同学,经常会遇到几百或几千个站点,然后对于收录情况去做分析的情况 那么多余常用的一些工具在面对几千个站点需要去做收录分析的时候,那么就显得不是很合适. 在此特意分享给大家一个批量查询百度收录 ...

  5. Python 实现火车票查询工具

    注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...

  6. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

  7. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

  8. 10分钟教你用Python打造微信天气预报机器人

    01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...

  9. Python3实现火车票查询工具

    Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1.  知识点: Pyth ...

随机推荐

  1. 使用qt creator来编译 调试 用CMakeLists组织的工程

                                                   爱情原如树叶一样,在人忽视里绿了,在忍耐里露出蓓蕾. -- 何其芳 使用CMake作为构建系统,需要自己写 ...

  2. Java 中的并发工具类

    Java 中的并发工具类 CountDownLatch public class JoinCountDownLatchTest { public static void main(String[] a ...

  3. 【坑】前端使用ajax异步请求以后,springMvc拦截器跳转页面无效

    文章目录 前言 `$.ajaxSetup( )` 后记 前言 本文着重解决前后端分离开发的页面调整问题. 笔者,在做一个需求,需要对访问网站,但是没有登录的用户进行拦截,将他们重定向到首页. 很简单的 ...

  4. Python30之文件2(文件系统)

    一.在python中对于文件系统的访问一般使用的是os模块.python是跨平台的,因此在使用os模块时,不需要关心是在什么系统下使用的 import os >>> os.listd ...

  5. Kubernetes(k8s) docker 修改 /dev/shm大小

    一.问题 /dev/shm在/etc/fstab中挂载,对应tmpfs,实际使用的是内存的空间.默认情况下,/dev/shm为物理内存大小的一半. 在Kubernetes上跑docker,发现/dev ...

  6. Python 命令行模块使用技巧

    命令行参数传递 python main.py -H 192.168.1.1 -p 22,23,24 #coding:utf-8 import optparse def PortScan(host,po ...

  7. cf 869c The Intriguing Obsession

    题意:有三种三色的岛,用a,b,c来标识这三种岛.然后规定,同种颜色的岛不能相连,而且同种颜色的岛不能和同一个其他颜色的岛相连.问有多少种建桥的方法. 题解:em....dp.我们先看两个岛之间怎么个 ...

  8. Integer源码解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangyangzhizhou/article/details/77196626 概况 Java的In ...

  9. interface Part4(接口中的多态)

    使用接口实现多态 需要满足以下两个条件. 定义接口并使用类实现了接口中的成员. 创建接口的实例指向不同的实现类对象. 假设接口名称为 ITest,分别定义两个实现类来实现接口的成员,示例代码如下. i ...

  10. ajax中的事件

    blur : 当光标移开时(点击)触发 change : 当光标移开并且文本框中的内容和上一次不一致时(点击)触发