python实现百度关键词排名查询


Posted in Python onMarch 30, 2014

就是一个简单的python查询百度关键词排名的函数,以下是一些简介:
1、UA随机
2、操作简单方便,直接getRank(关键词,域名)就可以了
3、编码转化。编码方面应该没啥问题了。
4、结果丰富。不仅有排名,还有搜索结果的title,URL,快照时间,符合SEO需求
5、拿来做个软件或者自己用都很方便。

功能是单线程实现,速度慢,大家可以参考修改成自己需要的。

#coding=utf-8
import requests
import BeautifulSoup
import re
import random
def decodeAnyWord(w):
    try:
        w.decode('utf-8')
    except:
        w = w.decode('gb2312')
    else:
        w = w.decode('utf-8')
    return w
def createURL(checkWord):   #create baidu URL with search words
    checkWord = checkWord.strip()
    checkWord = checkWord.replace(' ', '+').replace('\n', '')
    baiduURL = 'http://www.baidu.com/s?wd=%s&rn=100' % checkWord
    return baiduURL
def getContent(baiduURL):   #get the content of the serp
    uaList = ['Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+TencentTraveler)',
    'Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729)',
    'Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1',
    'Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1)',
    'Mozilla/5.0+(Windows+NT+6.1;+rv:11.0)+Gecko/20100101+Firefox/11.0',
    'Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+SV1)',
    'Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+GTB7.1;+.NET+CLR+2.0.50727)',
    'Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+KB974489)']
    headers = {'User-Agent': random.choice(uaList)}
    r = requests.get(baiduURL, headers = headers)
    return r.content
def getLastURL(rawurl): #get final URL while there're redirects
    r = requests.get(rawurl)
    return r.url
def getAtext(atext):    #get the text with <a> and </a>
    pat = re.compile(r'<a .*?>(.*?)</a>')
    match = pat.findall(atext.replace('\n', ''))
    pureText = match[0].replace('<em>', '').replace('</em>', '')
    return pureText.replace('\n', '')
def getCacheDate(t):    #get the date of cache
    pat = re.compile(r'<span class="g">.*?(\d{4}-\d{1,2}-\d{1,2}) </span>')
    match = pat.findall(t)
    cacheDate = match[0]
    return cacheDate
def getRank(checkWord, domain): #main line
    checkWord = checkWord.replace('\n', '')
    checkWord = decodeAnyWord(checkWord)
    baiduURL = createURL(checkWord)
    cont = getContent(baiduURL)
    soup = BeautifulSoup.BeautifulSoup(cont)
    results = soup.findAll('table', {'class': 'result'})    #find all results in this page
    for result in results:
        checkData = unicode(result.find('span', {'class': 'g'}))
        if re.compile(r'^[^/]*%s.*?' %domain).match(checkData.replace('<b>', '').replace('</b>', '')): #改正则
            nowRank = result['id']  #get the rank if match the domain info
            resLink = result.find('h3').a
            resURL = resLink['href']
            domainURL = getLastURL(resURL)  #get the target URL
            resTitle = getAtext(unicode(resLink))   #get the title of the target page
            rescache = result.find('span', {'class': 'g'})
            cacheDate = getCacheDate(unicode(rescache)) #get the cache date of the target page
            res = u'%s, 第%s名, %s, %s, %s' % (checkWord, nowRank, resTitle, cacheDate, domainURL)
            return res.encode('gb2312')
            break
    else:
        return '>100'

domain = 'www.baidu.com' #set the domain which you want to search.
print getRank('百度', domain)
Python 相关文章推荐
用Python进行TCP网络编程的教程
Apr 29 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
详解python eval函数的妙用
Nov 16 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
python实现月食效果实例代码
Jun 18 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python线程池如何使用
May 28 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 Python
python获取网页状态码示例
Mar 30 #Python
python单线程实现多个定时器示例
Mar 30 #Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 #Python
使用python实现扫描端口示例
Mar 29 #Python
Python Trie树实现字典排序
Mar 28 #Python
python实现探测socket和web服务示例
Mar 28 #Python
python实现目录树生成示例
Mar 28 #Python
You might like
从wamp到xampp的升级之路
2015/04/08 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP实现倒计时功能
2020/11/16 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
ES6新特性之Object的变化分析
2017/03/31 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
python通过smpt发送邮件的方法
2015/04/30 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
python三大神器之fabric使用教程
2019/06/10 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
土地转让协议书
2014/04/15 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
2014年消防工作总结
2014/11/21 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
python pyhs2 的安装操作
2021/04/07 Python
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android