Python實現(xiàn)獲取網(wǎng)站PR及百度權(quán)重
上一次我用requests庫寫的一個抓取頁面中鏈接的簡單代碼,延伸一下,我們還可以利用它來獲取我們網(wǎng)站的PR以及百度權(quán)重。原理差不多。最后我們甚至可以寫一個循環(huán)批量查詢網(wǎng)站的相關(guān)信息。
先說說GooglePR,全稱PageRank。它是Google官方給出的評定一個網(wǎng)站SEO的評級,這個大家應(yīng)該不陌生。既然是官方給出的,當(dāng)然有一個官方的接口去獲取它。我們這里就利用官方的接口獲取谷歌PR。
GPR_HASH_SEED ="Mining PageRank is AGAINST GOOGLE'S TERMS OF SERVICE. Y\
es, I'm talking to you, scammer."
def google_hash(value):
magic = 0x1020345
for i in xrange(len(value)):
magic ^= ord(GPR_HASH_SEED[i % len(GPR_HASH_SEED)]) ^ ord(value[i])
magic = (magic >> 23 | magic << 9) & 0xFFFFFFFF
return "8%08x" % (magic)
def getPR(www):
try:
url = 'http://toolbarqueries.google.com/tbr?' \
'client=navclient-auto&ch=%s&features=Rank&q=info:%s' % (google_hash(www) , www)
response = requests.get(url)
rex = re.search(r'(.*?:.*?:)(\d+)',response.text)
return rex.group(2)
except :
return None
使用方法:傳入域名,返回PR值
google_hash這個函數(shù)只是個算法,算出一個域名類似hash值的一個東西并返回??梢圆蝗ス芩窃趺磳崿F(xiàn)的,我們主要看getPR這個函數(shù)。我們google官方給出的接口是這個:http://toolbarqueries.google.com/tbr?client=navclient-auto&ch={HASH}&features=Rank&q=info:{域名}
{HASH}這里我們就使用google_hash()這個函數(shù),傳入域名,返回它對應(yīng)的HASH值。比如我們離別歌的域名www.leavesongs.com,它的谷歌HASH是8b1e6ad00,于是構(gòu)造出來的咨詢網(wǎng)址是:http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=8b1e6ad00&features=Rank&q=info:www.leavesongs.com
訪問它,得到Rank_1:1:0。第二個引號后面的數(shù)字是PR,因為我的站是沒有PR的,所以PR為0.
于是,我們使用requests.get()來訪問我們這個構(gòu)造好的URL,然后獲得類似Rank_1:1:0這樣的結(jié)果,最后通過正則或其他方式得到PR值0。
以上是getPR這個函數(shù)的執(zhí)行過程。再看獲取百度權(quán)重的過程。
百度權(quán)重并不是百度官方給的一個標(biāo)準(zhǔn),是一些第三方網(wǎng)站計算的一個值,所以并沒有像PR一樣的接口。所以我們就需要抓取這些第三方網(wǎng)站中的信息了。下面是獲取百度權(quán)重的函數(shù):
def getBR(www):
try:
url = 'http://mytool.chinaz.com/baidusort.aspx?host=%s&sortType=0' % ( www , )
response = requests.get(url)
data = response.text
rex = re.search(r'(<div class="siteinfo">.+?<font.+?>)(\d*?)(</font>)',data,re.I)
return rex.group(2)
except :
return None
使用方法也是傳入域名,返回權(quán)重值。
我抓取的是站長工具的一個權(quán)重咨詢的頁面:http://mytool.chinaz.com/baidusort.aspx?host={域名}&sortType=0
我的正則就是它:(<div class="siteinfo">.+?<font.+?>)(\d*?)(</font>),大家可以自己查看源代碼看一下,就知道正則怎么寫了。
好了,我們來批量獲取一下這些網(wǎng)站的PR和權(quán)重:

直接看結(jié)果:

單一一個進程掃的話速度會略慢,開10個20個線程批量獲取的話應(yīng)該比較快。
相關(guān)文章
Python語法學(xué)習(xí)之進程的創(chuàng)建與常用方法詳解
本文我們將學(xué)習(xí)一下在?Python?中去創(chuàng)建并使用多進程的方法,可以通過創(chuàng)建多個進程來幫助我們提高腳本執(zhí)行的效率,感興趣的可以了解一下2022-04-04
python網(wǎng)絡(luò)爬蟲精解之正則表達式的使用說明
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達對字符串的一種過濾邏輯2021-09-09
Python字典創(chuàng)建 遍歷 添加等實用基礎(chǔ)操作技巧
字段是Python是字典中唯一的鍵-值類型,本文講述了Python中字典如何創(chuàng)建 遍歷 添加等實用基礎(chǔ)操作技巧,內(nèi)容非常基礎(chǔ)但非常重要,一定要熟練掌握2018-09-09
python學(xué)習(xí)之subprocess模塊詳解
這篇文章主要介紹了python學(xué)習(xí)之subprocess模塊的相關(guān)資料,該模塊用于創(chuàng)建子進程并與其進行交互,它提供了多個函數(shù)和類來執(zhí)行操作系統(tǒng)命令、獲取命令輸出以及管理子進程的生命周期,需要的朋友可以參考下2024-12-12
Python pkg_resources模塊動態(tài)加載插件實例分析
當(dāng)編寫應(yīng)用軟件時,我們通常希望程序具有一定的擴展性,額外的功能——甚至所有非核心的功能,都能通過插件實現(xiàn),具有可插拔性。特別是使用 Python 編寫的程序,由于語言本身的動態(tài)特性,為我們的插件方案提供了很多種實現(xiàn)方式2022-08-08

