python查询百度seo信息

一个简单的python查询百度关键词排名的函数,特点:

1、UA随机

2、操作简单方便,直接getRank(关键词,域名)就可以了

3、编码转化。编码方面应该没啥问题了。

4、结果丰富。不仅有排名,还有搜索结果的title,URL,快照时间,符合SEO需求

缺点:

单线程,速度慢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#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)}
    ipList= ['202.43.188.13:8080',
    '80.243.185.168:1177',
    '218.108.85.59:81']
    proxies= {'http':'http://%s' % random.choice(ipList)}
    r= requests.get(baiduURL, headers= headers, proxies= proxies)
    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)
    pureText= match[0].replace('<em>', '').replace('</em>', '')
    return pureText
 
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 resultin results:
        checkData= unicode(result.find('span', {'class':'g'}))
        if re.compile(r'^[^/]*%s.*?' %domain).match(checkData):#改正则
            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.douban.com' #set the domain which you want to search.
 
 
 
f= open('r.txt')
for win f.readlines():
    print getRank(w, domain)
 
f.close()
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容