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的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
21行Python代码实现拼写检查器
Jan 25 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python 寻找局部最高点的实现
Dec 05 Python
Transpose 数组行列转置的限制方式
Feb 11 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
selenium自动化测试入门实战
Dec 21 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 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
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
JavaScript 调试器简介
2009/02/21 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
Python中实现的RC4算法
2015/02/14 Python
Python正则表达式常用函数总结
2017/06/24 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python3 修改默认环境的方法
2019/02/16 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
python mock测试的示例
2020/10/19 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
承诺书格式
2014/06/03 职场文书
个人工作保证书
2015/02/28 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书