年夜這篇文章起頭不籌算再破耗年夜量精神去寫軌范自己的常識,事實?下場是各類書籍上有的內(nèi)容。其余首要需要進修的是內(nèi)置函數(shù)的使用,和一些模塊的使用體例,尤其是pycurl, re, threading這些需要慢慢熟悉起來。
若在進修中有不解的處所,在文章評論中可以提出,如不美觀有空會死力輔佐解答。
軌范需求
對于稍年夜的一個網(wǎng)站,往往話芐良多關(guān)頭詞需要每隔一個周期監(jiān)控它們的排名,以剖析seo效不美觀的口角,及判定百度Google的動向等等。
有一個關(guān)頭在于數(shù)據(jù)的收集全自動與否的問題。若經(jīng)常用Google Analytics剖析數(shù)據(jù)的話應(yīng)該會感受到,數(shù)據(jù)剖析的需求是多種多樣的,只有事先已經(jīng)有了完美的各個維度的數(shù)據(jù)往后,才能跟著最初的設(shè)法進行剖析,而不會為數(shù)據(jù)的匱乏所局限。像Google Analytics這樣超卓的工具完全自動的將這些數(shù)據(jù)收集了起來,才給seo對于流量的多樣化剖析打下了基本。同樣的,如不美觀想剖析的時辰更自由的話,就需要記實盡多種類的歷史數(shù)據(jù),如不美觀這些作為每日工作,那將耗時很是長,所以自動化的收集就浮現(xiàn)出了其主要性。
現(xiàn)有的監(jiān)控排名首要解決方案是使用商業(yè)軟件Rank Tracker,但它也有些不是很理想的處所。好比對于幾乎所有既有軟件都存在的問題,功能不矯捷。此外它最年夜的短處之一在于它必然要找個具有圖形界面的系統(tǒng)運行(因為它是Java實現(xiàn)的,有多操作系統(tǒng)版本,所以不必然是Windows)。
對于DIY的Python劇本,在Linux系統(tǒng)瑯縵沔可以將其放到crontab中(系統(tǒng)級打算使命),全自動的按時運行收集原始數(shù)據(jù)。然后在需要的時辰,再用此外的劇原本措置原始數(shù)據(jù),進行各個維度的剖析。所需的一般情形下為:Linux系統(tǒng)的低設(shè)置裝備擺設(shè)VPS一臺,總共不跨越100行的Python代碼(Windows也能實現(xiàn)這些,但相對斗勁麻煩)。
然后再來剖析更具體的需求。此處我總結(jié)了一些原則:
1. 除非數(shù)據(jù)量年夜到會對硬盤帶來壓力(好比每日數(shù)G的日志的剖析等),否則把能想到的盡多的數(shù)據(jù)都記實下來。因為剖析的需求是多變的,數(shù)據(jù)若周全即可有備無患。
2. 同上,除非數(shù)據(jù)量極年夜,否則務(wù)必把歷史數(shù)據(jù)全數(shù)保留下來。在年夜數(shù)據(jù)量的時辰,也需要按現(xiàn)實情形保留一按時刻區(qū)間的數(shù)據(jù)(打個例如,前3年每月保留一副本,昔時每周保留一副本)。歷史數(shù)據(jù)的對比在良多時辰的意義很是年夜。
3. 當數(shù)據(jù)很是單一的時辰,使用txt按行保留;當數(shù)據(jù)斗勁簡單的時辰,使用csv按行列儲存;當數(shù)據(jù)斗勁復(fù)雜的時辰,可以考慮使用MongoDB等key-value型NoSQL儲存;再復(fù)雜的時辰,使用MySQL之類的關(guān)系性數(shù)據(jù)庫儲存。但這些不是絕對的,仍是要看現(xiàn)實情形而定。
對于今朝的需求,因為是要監(jiān)控關(guān)頭詞排名趨向,所以一般最多監(jiān)控幾千個關(guān)頭詞就夠了。或許網(wǎng)站斗勁年夜,想體味數(shù)十萬的關(guān)頭辭書排名,但對于體味排名趨向的情形下,沒需要全數(shù)發(fā)芽,隨機拔取其一一小部門作為樣本就可以了。
因為最多幾千個關(guān)頭詞,所以最好天天記實一次它們的排名數(shù)據(jù)(保證不變的情形下,對于單IP,Google天天可以發(fā)芽5000+詞,百度則可以發(fā)芽數(shù)萬的詞)。而且數(shù)據(jù)自己,首要為關(guān)頭詞、排名、著陸頁URL這幾項,文件體積很小,所以天天都保留一份數(shù)據(jù)。
數(shù)據(jù)的儲存體例上,此時一般建議選擇csv。它和Excel表格(xls)在數(shù)據(jù)的儲存體例上是一模一樣的。
代碼實現(xiàn)
這些代碼需要以下運行情形:
Linux操作系統(tǒng)
Python的第三方模塊pycurl
Python下載網(wǎng)頁的最簡單體例是:
import urllib2
print urllib2.urlopen('http://***.com/').read()
但urllib2模塊自己功能雖然還行,卻仍離pycurl模塊有較年夜距離。且在做稍微復(fù)雜一些的操作時,pycurl模塊使用起來比urllib2模塊便利良多。pycurl是必需要諳練運用的模塊之一,但也因為它上手可能會讓人有頷首疼,這里我自己寫了一個模塊,以此即可便利的使用它:
from pycurl import *
import StringIO, time, random
def curl(url, retry=False, delay=1, **kwargs):
'''Basic usage: curl('http://www.xxx.com/'), will download the url.
If set `retry` to True, when network error, it will retry automatically.
`delay` set the seconds to delay between every retry.
**kwargs can be curl params. For example:
curl(url, FOLLOWLOCATION=False, USERAGENT='Firefox')
'''
useragent_list = [
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)',
'Opera/9.20 (Windows NT 6.0; U; en)',
'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.1; .NET CLR 1.1.4322)',
'Opera/9.00 (Windows NT 5.1; U; en)',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.0',
'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1',
]
size = len(useragent_list)
useragent = useragent_list[random.randint(0, size-1)]
s = StringIO.StringIO()
c = Curl()
c.setopt(NOSIGNAL, True)
c.setopt(FOLLOWLOCATION, True)
c.setopt(MAXREDIRS, 5)
推薦閱讀
<b>合格SEOER的白帽操作手冊:SEO效果最大化</b>
巨匠好,我是虛子雨。不知道巨匠對于白帽seo關(guān)注度有若干好多,小我因為喜歡進行白帽seo操作,對于這個辭書關(guān)注度就斗勁高,而且也倡導(dǎo)我四周的伴侶進行白帽seo,因為黑帽seo有時辰雖然短時刻內(nèi)有不錯的效不美觀,可>>>詳細閱讀
本文標題:<b>全自動監(jiān)控網(wǎng)站關(guān)鍵詞排名(Python實現(xiàn))</b>
地址:http://www.brh9h.cn/a/34/20120417/51890.html