python打造批量关键词排名查询工具
自己做站点的时候,都看看收录和关键词排名什么的,所以打造的这个批量关键词查询工具。
#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打造批量关键词排名查询工具的更多相关文章
- python打造文件包含漏洞检测工具
0x00前言: 做Hack the box的题.感觉那个平台得开个VIp 不然得凉.一天只能重置一次...mmp 做的那题毒药是文件包含漏洞的题,涉及到了某个工具 看的不错就开发了一个. 0x01代码 ...
- 第11章:使用Python打造MySQL专家系统
1.Python语言高级特性 1).深入浅出Python生成器 1).生成器函数:与普通函数定义类似,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间挂 ...
- python打造seo必备工具-自动查询排名
因为工作需要,利用业余时间开发的,可以查询百度排名+360排名工具,附上代码. #360搜索排名查询 # -*- coding=utf-8 -*- import requests from lxml ...
- Python + MySQL 批量查询百度收录
做SEO的同学,经常会遇到几百或几千个站点,然后对于收录情况去做分析的情况 那么多余常用的一些工具在面对几千个站点需要去做收录分析的时候,那么就显得不是很合适. 在此特意分享给大家一个批量查询百度收录 ...
- Python 实现火车票查询工具
注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...
- Python 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
- 10分钟教你用Python打造微信天气预报机器人
01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...
- Python3实现火车票查询工具
Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1. 知识点: Pyth ...
随机推荐
- velocity 自定义工具类接入
网上的教程几乎都是同一篇: velocity 自定义工具类 - eggtk - CSDN 博客 但是教程有不完善的地方,我就补充一下. 补充: 引入的jar包和版本要一致.我们项目中因为没有定义确切版 ...
- numpy 数组集合运算及下标操作
1. 数组的集合运算 1.1. 并集 np.union1d(a,b)计算数组的并集: In [1]: import numpy as np In [2]: a = np.array([1,2,3]) ...
- models环境配置和表查询
一般操作 在进行一般操作时先配置一下参数,使得我们可以直接在Django页面中运行我们的测试脚本 在Python脚本中调用Django环境 模型转为mysql数据库中的表settings配置 需要在s ...
- spring security关闭http验证 和 springboot 使用h2数据库
spring security关闭http验证 最近在跑demo的过程中,访问swagger页面的时候需要验证登录,记得在之前写的代码中是关闭了security验证,无需登录成功访问,直接在appli ...
- Anaconda中安装了Libtiff模块,但运行程序显示ModuleNotFoundError: No module named 'libtiff'
出现问题:Anaconda中已经用[conda install libtiff]命令安装了libtiff,并且利用命令[conda list]发现libtiff确实存在,但在pip中却不存在[pip ...
- python — 线程
目录 1.线程基础知识 2 Thread 类 3 锁 4 队列 1.线程基础知识 1.1 进程与线程的区别 进程: 创建进程 时间开销大 销毁进程 时间开销大 进程之间切换 时间开销大 线程: 线程是 ...
- 20191104-基于Python计数排序算法分析
计数排序 计数排序算法没有用到元素间的比较,它利用元素的实际值来确定它们在输出数组中的位置,也就是说元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的,将每个元素出现的次数记 ...
- Android--DES加密
Base64.java import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputS ...
- "一起来捉妖"怎么从瘸腿中组合到最合心意的妖灵
背景: 最近两天活动,黑鬼白鬼合体觉醒秋容,陆无名,聂小倩,作为一个非土豪玩家,没有超高资质妖灵的我,想要在瘸腿妖灵中选取两个最佳选择,合体觉醒. 初选: 备选妖灵从5个维度录入数据,进行选择,分别为 ...
- Angular 学习笔记 (Custom Accessor + Mat FormField + Custom select)
custom form control 之前就写过了,这里简单写一下. 创建一个组件实现 ControlValueAccessor 接口 @Component({ providers: [ { pro ...