python結(jié)合shell查詢(xún)google關(guān)鍵詞排名的實(shí)現(xiàn)代碼
最近老婆大人的公司給老婆大人安排了一個(gè)根據(jù)關(guān)鍵詞查詢(xún)google網(wǎng)站排名的差事。老婆大人的公司是做seo的,查詢(xún)的關(guān)鍵詞及網(wǎng)站特別的多,看著老婆大人這么辛苦的重復(fù)著查詢(xún)工作,心疼啊。所以花點(diǎn)時(shí)間用python寫(xiě)了一個(gè)根據(jù)關(guān)鍵詞搜索網(wǎng)站排名的py腳本。
在寫(xiě)這個(gè)腳本之前,我也曾在網(wǎng)站搜索過(guò)關(guān)于在google查排名的腳本。很多是利用google的api。但是我測(cè)試了一下,不準(zhǔn)。所以,自己寫(xiě)一個(gè)吧。
腳本內(nèi)容如下:(關(guān)鍵詞我在網(wǎng)站隨便找了幾個(gè)。以做測(cè)試使用)
#vim keyword.py import urllib,urllib2,cookielib,re,sys,os,time,random cj = cookielib.CookieJar() vibramkey=['cheap+five+fingers','vibram+five+fingers'] beatskey=['beats+by+dre','beats+by+dre+cheap'] vibramweb=['vibramforshoes.com','vibramfivetoeshoes.net','vibramfivefingersshoesx.com '] beatsweb=['beatsbydre.com','justlovebeats.com'] allweb=['vibramweb','beatsweb'] def serchkey(key,start): url="http://www.google.com/search?hl=en&q=%s&revid=33815775&sa=X&ei=X6CbT4GrIoOeiQfth43GAw&ved=0CIgBENUCKAY&start=%s" %(key,start) try: opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders = [('User-agent', 'Opera/9.23')] urllib2.install_opener(opener) req=urllib2.Request(url) response =urllib2.urlopen(req) content = response.read() f=open('google','w') f.write(content) tiqu=os.popen("grep -ioP '(?<=<cite>).*?(?=</cite>)' google|sed -r 's/(<*\/*cite>|<\/*b>)//g'").readlines() except: changeip() else: for yuming in pinpai: a=1 for shouyuming in tiqu: real=shouyuming.find(yuming) if real>0: if start==0: page=1 elif start==10: page=2 elif start==20: page=3 elif start==30: page=4 else: page=5 lastkey=key.replace("+"," ") xinxi="%s\t\t %s\t\t page%s,%s<br>\n" %(yuming,lastkey,page,a) xinxifile=open('index.html','a') xinxifile.write(xinxi) xinxifile.close() a=a+1 def changeip(): ip=random.randint(0,2) de="route del -host google.com" add="route add -host google.com eth1:%s" %ip os.system(de) os.system(add) print "changip to %s" %ip pinpaiid=0 for x in vibramkey,beatskey: if pinpaiid == 0: pinpai=vibramweb elif pinpaiid == 1: pinpai=beatsweb pinpaiid=pinpaiid+1 for key in x: for start in 0,10,20,30,40: serchkey(key,start) changeip() os.system("sh paiban.sh")
#vim paiban.sh #! /bin/bash sort index.html -o index.html line=`wc -l index.html|awk '{print $1}'` yuming2=`sed -n 1p index.html|awk '{print $1}'` for i in `seq 2 $line` do yuming=`sed -n "$i"p index.html|awk '{print $1}'` if [ $yuming == $yuming2 ];then sed -i ""$i"s/"$yuming"/\t\t/g" index.html else yuming2=$yuming fi done
這段腳本分兩部分,第一部分是python利用關(guān)鍵詞搜索google的頁(yè)面。老婆大人說(shuō)只要每一個(gè)關(guān)鍵詞的前5頁(yè)就可以。所以只查詢(xún)了前5頁(yè)。
第二部分是將查詢(xún)出來(lái)的結(jié)果進(jìn)行排版。也就是最下面調(diào)用paiban.sh 所做的事情,讓最終出來(lái)的結(jié)果為如下格式:
網(wǎng)站1 關(guān)鍵詞1 第幾頁(yè) 第幾名
關(guān)鍵詞2 第幾頁(yè) 第幾名
關(guān)鍵詞3 第幾頁(yè) 第幾名
網(wǎng)站2 關(guān)鍵詞1 第幾頁(yè) 第幾名
關(guān)鍵詞2 第幾頁(yè) 第幾名
關(guān)鍵詞3 第幾頁(yè) 第幾名
下面就來(lái)對(duì)程序進(jìn)行講解。
import urllib,urllib2,cookielib,re,sys,os,time,random #加載模塊 cj = cookielib.CookieJar() vibramkey=['cheap+five+fingers','vibram+five+fingers'] #定義要查詢(xún)的關(guān)鍵詞組1,里面的單引號(hào)里面就是要查詢(xún)的關(guān)鍵詞。 beatskey=['beats+by+dre','beats+by+dre+cheap'] #同上,定義關(guān)鍵詞組2,這個(gè)是另一組關(guān)鍵詞。 vibramweb=['vibramforshoes.com','vibramfivetoeshoes.net','vibramfivefingersshoesx.com '] #定義關(guān)健詞組1要查詢(xún)的網(wǎng)站 beatsweb=[' beatsbydre.com',' justlovebeats.com'] #定義關(guān)健詞組2要查詢(xún)的網(wǎng)站 allweb=['vibramweb','beatsweb'] #這里定義了一個(gè)所有網(wǎng)站的組,下面好調(diào)用。 def serchkey(key,start): #這里定義一個(gè)函數(shù),key為查詢(xún)的關(guān)健詞,start為頁(yè)面,通過(guò)google查詢(xún)頁(yè)面可以看出來(lái)每個(gè)頁(yè)面除ads外只有十條記錄,start=0時(shí)顯示為第一個(gè)頁(yè)面第一至第十條記錄,start=10時(shí),顯示第二頁(yè)的第一至十條記錄,以些類(lèi)推。 url="http://www.google.com/search?hl=en&q=%s&revid=33815775&sa=X&ei=X6CbT4GrIoOeiQfth43GAw&ved=0CIgBENUCKAY&start=%s" %(key,start) #這個(gè)定義了查詢(xún)的URL try: opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders = [('User-agent', 'Opera/9.23')] #模擬瀏覽器訪(fǎng)問(wèn) urllib2.install_opener(opener) req=urllib2.Request(url) #用urllib2訪(fǎng)問(wèn) response =urllib2.urlopen(req) content = response.read()#這塊是模擬瀏覽器進(jìn)行訪(fǎng)問(wèn)url的頁(yè)面并讀取源代碼 f=open('google','w') f.write(content) #將讀取出來(lái)的內(nèi)容保存到google的一個(gè)頁(yè)面里。 tiqu=os.popen("grep -ioP '(?<=<cite>).*?(?=</cite>)' google|sed -r 's/(<*\/*cite>|<\/*b>)//g'").readlines() #這里利用了系統(tǒng)命令了。利用正則的零寬斷言提直接取出第一到第十位的網(wǎng)站域名。 except: changeip() #這邊是怕訪(fǎng)問(wèn)過(guò)多被google封了。所以這里有一個(gè)換ip的函數(shù),下面有定義。上面如果try失敗了,就執(zhí)行換ip的動(dòng)作。 else: for yuming in pinpai: #循環(huán)讀取要查找的網(wǎng)站 a=1 for shouyuming in tiqu: #循環(huán)讀取查找出來(lái)的網(wǎng)站 real=shouyuming.find(yuming) #將查找出來(lái)的網(wǎng)站與需要查找的網(wǎng)站進(jìn)行比對(duì) if real>0: if start==0: page=1 elif start==10: page=2 elif start==20: page=3 elif start==30: page=4 else: page=5 #這里的查看域名在google搜索后的哪一頁(yè)。 lastkey=key.replace("+"," ") #將定義的關(guān)鍵詞中間的加號(hào)去掉。 print yuming,lastkey,page,a xinxi="%s\t\t %s\t\t 第%s頁(yè),排名%s\n" %(yuming,lastkey,page,a) xinxifile=open('index.html','a') xinxifile.write(xinxi) xinxifile.close() #將查找出來(lái)的信息寫(xiě)入到index.html文件里 aa=a+1 def changeip(): #這里是定義查詢(xún)時(shí)換ip的函數(shù)。如果機(jī)器只有一個(gè)ip那就不用這段了。 ip=random.randint(0,10) #隨機(jī)生成0-10的數(shù) del="route del -host google.com" #刪除路由命令 add="route add -host google.com eth1:%s" %ip #添加路由命令 os.system(del) #執(zhí)行刪除路由命令 os.system(add) #執(zhí)行添加路由命令 print "changip to %s" %ip #打印更改路由信息 pinpaiid=0 for x in vibramkey,beatskey: #循環(huán)所有的關(guān)鍵詞組 if pinpaiid == 0: # 對(duì)應(yīng)關(guān)鍵詞組與要查詢(xún)的網(wǎng)站組 pinpai=vibramweb elif pinpaiid == 1: pinpai=beatsweb pinpaiidpinpaiid=pinpaiid+1 for key in x: #循環(huán)關(guān)鍵詞組里的關(guān)鍵詞 for start in 0,10,20,30,40: #定義所要查找的google的頁(yè)面 serchkey(key,start) changeip() #更改ip函數(shù)。在每一組關(guān)鍵詞查詢(xún)完畢后更改ip.
以上命令執(zhí)行后,我們看一下index.html文件內(nèi)容。如下:
#cat index.html
vibramforshoes.com cheap five fingers page 1,rank 3
vibramfivetoeshoes.net cheap five fingers page 5,rank 5
vibramforshoes.com vibram five fingers page 1,rank 6
vibramfivetoeshoes.net vibram five fingers page 5,rank 10
beatsbydre.com beats by dre page 1,rank 1
justlovebeats.com beats by dre page 5,rank 7
beatsbydre.com beats by dre cheap page 2,rank 2
beatsbydre.com beats by dre cheap page 2,rank 3
beatsbydre.com beats by dre cheap page 5,rank 10
如圖:
這樣看很亂,那么我們?nèi)绾尾拍苓_(dá)到上面所講 一個(gè)站后面對(duì)應(yīng)多個(gè)關(guān)鍵詞的格式呢,這里我們就要用到 paiban.sh 這個(gè)小腳本了。我們把paiban.sh放在py程序的最后,當(dāng)執(zhí)行py程序執(zhí)行完畢后,執(zhí)行paiban.sh 這個(gè)paiban.sh已經(jīng)加在py程序里面了,所有不需要另外執(zhí)行。我這里主要看一下區(qū)別。所有在py程序里注釋了。
#sh paiban.sh #cat index.html beatsbydre.com beats by dre cheap page 2,rank 2 beats by dre cheap page 2,rank 3 beats by dre cheap page 5,rank 10 beats by dre page 1,rank 1 justlovebeats.com beats by dre page 5,rank 7 vibramfivetoeshoes.net cheap five fingers page 5,rank 5 vibram five fingers page 5,rank 10 vibramforshoes.com cheap five fingers page 1,rank 3 vibram five fingers page 1,rank 6
如圖:
這樣就能達(dá)到上面的效果了。排版也很清楚,哪個(gè)站對(duì)應(yīng)哪個(gè)關(guān)鍵詞。在第幾頁(yè),第幾位,一目了然。
我們也對(duì)paiban.sh這個(gè)腳本做一下解釋。
#vim paiban.sh #! /bin/bash sort index.html -o index.html #先把index.html文件排下序,再寫(xiě)入index.html line=`wc -l index.html|awk '{print $1}'` #統(tǒng)計(jì)行 yuming2=`sed -n 1p index.html|awk '{print $1}'` #取第一行的域名 給yuming2 for i in `seq 2 $line` #從第二行開(kāi)始了取域名 do yuming=`sed -n "$i"p index.html|awk '{print $1}'` if [ $yuming == $yuming2 ];then sed -i ""$i"s/"$yuming"/\t\t/g" index.html #如果下一行域名與yuming2域名相同,就把下一行域名替換成空 else yuming2=$yuming #如果不相等,就把下一行的域名給yuming2變量 fi done
好了。這個(gè)小腳本挺好用的,老婆大人天天在用。為她減輕了不少工作量。直夸我能干。。。,哈哈。。如果有看不明白的,歡迎加QQ討論。QQ:410018348
- python微信公眾號(hào)之關(guān)鍵詞自動(dòng)回復(fù)
- python多進(jìn)程提取處理大量文本的關(guān)鍵詞方法
- python實(shí)現(xiàn)關(guān)鍵詞提取的示例講解
- Python 結(jié)巴分詞實(shí)現(xiàn)關(guān)鍵詞抽取分析
- 淺析Python中yield關(guān)鍵詞的作用與用法
- 教你用python3根據(jù)關(guān)鍵詞爬取百度百科的內(nèi)容
- Python抓取淘寶下拉框關(guān)鍵詞的方法
- python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法
- python提取內(nèi)容關(guān)鍵詞的方法
- python通過(guò)BF算法實(shí)現(xiàn)關(guān)鍵詞匹配的方法
- python實(shí)現(xiàn)textrank關(guān)鍵詞提取
相關(guān)文章
20行python代碼實(shí)現(xiàn)人臉識(shí)別
這篇文章主要介紹了python人臉識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Flask框架學(xué)習(xí)筆記之使用Flask實(shí)現(xiàn)表單開(kāi)發(fā)詳解
這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之使用Flask實(shí)現(xiàn)表單開(kāi)發(fā),結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架表單模板定義、數(shù)據(jù)提交等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08python3實(shí)現(xiàn)多線(xiàn)程聊天室
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)多線(xiàn)程聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Python re.sub 反向引用的實(shí)現(xiàn)
反向引用指的是在指定替換結(jié)果的過(guò)程中,可以引用原始字符串中的匹配到內(nèi)容,本文主要介紹了反向引用的設(shè)置方法,感興趣的可以了解一下2021-07-07如何徹底解決python?NameError:name?'__file__'?is?not?
這篇文章主要給大家介紹了關(guān)于如何徹底解決python?NameError:name?'__file__'?is?not?defined的相關(guān)資料,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02