Python 刷網頁訪問量

額……有這種想法,感覺自己壞壞噠……其實,自己剛開始寫CSDN博客,看到朋友們的博客訪問量都達到幾十萬幾百萬了,而自己剛開始寫,一星期過去了訪問量才兩位數,好拙計啊……說白了還是自己的虛榮心在作怪……嘗試一下吧……

 

使用了python3的urllib模塊,開始使用了簡單的urllib.request.urlopen()函數,結果發現行不通,csdn設置了簡單的檢查選項,需要python模擬瀏覽器進行訪問才行,簡單的很,那就模仿一個好啦,使用urllib.request.build_opener()就可以進行模擬啦,添加一個訪問頭就可以啦

 

但是呢,訪問太頻繁有可能會造成服務器拒絕訪問,那麼就稍微等等好啦,使用time模塊中的sleep()函數即可。還有一個小問題,當服務器拒絕的時候,python會當成錯誤,從而終止了程序,這樣就不好玩了,一點都不自動化,解決這個問題也蠻簡單,剛纔看書纔看到try…except…語法,這樣把出現的錯誤都放到except語句裏面不就OK了麼,經過本人測試,一般會出現下面兩個錯誤urllib.error.HTTPError和urllib.error.URLError,那這兩個錯誤都弄到except裏面就可以啦,哈哈

 

於是簡單的刷一個頁面的版本出現啦,代碼如下:


__author__ = 'MrChen'

import urllib.request
import time

#使用build_opener()是爲了讓python程序模仿瀏覽器進行訪問
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

#專刷某個頁面
print('開始刷了哦:')
tempUrl = 'http://blog.csdn.net/calling_wisdom/article/details/40900815'
for j in range(200):
    try :
        opener.open(tempUrl)
        print('%d %s' % (j , tempUrl))
    except urllib.error.HTTPError:
        print('urllib.error.HTTPError')
        time.sleep(1)
    except urllib.error.URLError:
        print('urllib.error.URLError')
        time.sleep(1)
    time.sleep(0.1)



上面這個版本圓滿完成了刷一個頁面的任務,還蠻好用的,但是呢,如果我要把我所有的博客都刷個遍呢,一個一個地刷是不是太慢了呢,鄙人七八篇博客還勉強可以接受,但是如果以後七八十篇呢……想想就頭疼,還是繼續想辦法吧

 

鑑於目前本人的所有博客都在博客主頁目錄的第一頁中,所以直接查看博客目錄,然後把每篇博客的網址都提取出來不久OK了麼,嗯,說幹就幹

 

簡單列一下思路:

1,  先抓取博客目錄頁的網址內容,然後使用re模塊進行查找,找到每篇博客的地址(實際情況是這樣的,裏面的網址都是半截半截的,類似這樣的/calling_wisdom/article/details/........,一會把前面的部分加上就可以了)

2,  把裏面重複的網頁過濾掉,這個也簡單,使用set()就可以了

3,  把抓取到的網址合併成可以直接進行訪問的網址

4,  使用一下剛學的BeautifulSoup解析網頁的標題,這樣就可以知道刷的是哪篇博客了(在這裏繼續誇一誇BeautifulSoup,超級好用,一下就把我想要的內容提取出來了)

5,  準備完畢,刷起來!每個頁面給大爺刷200遍先!讓爺裝B讓爺飛!

 

代碼如下:(註釋寫的很到位了吧,不用再解釋什麼吧,最討厭寫代碼沒註釋的)

__author__ = 'MrChen'

import urllib.request
import re
import time
from bs4 import BeautifulSoup

p = re.compile('/calling_wisdom/article/details/........')

#自己的博客主頁
url = "http://blog.csdn.net/calling_wisdom" 

#使用build_opener()是爲了讓python程序模仿瀏覽器進行訪問
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

html = opener.open(url).read().decode('utf-8')

allfinds = p.findall(html)
#print(allfinds)

urlBase = "http://blog.csdn.net"#需要將網址合併的部分
#頁面中的網址有重複的,需要使用set進行去重複
mypages = list(set(allfinds))
for i in range(len(mypages)):
    mypages[i] = urlBase+mypages[i]

print('要刷的網頁有:')
for index , page in enumerate(mypages) :
    print(str(index), page)

#設置每個網頁要刷的次數
brushNum = 200

#所有的頁面都刷
print('下面開始刷了哦:')
for index , page in enumerate(mypages) :
    for j in range(brushNum):
        try :
            pageContent = opener.open(page).read().decode('utf-8')
            #使用BeautifulSoup解析每篇博客的標題
            soup = BeautifulSoup(pageContent)
            blogTitle = str(soup.title.string)
            blogTitle = blogTitle[0:blogTitle.find('-')]
            print(str(j) , blogTitle) 
            
        except urllib.error.HTTPError:
            print('urllib.error.HTTPError')
            time.sleep(3)#出現錯誤,停幾秒先
            
        except urllib.error.URLError:
            print('urllib.error.URLError')
            time.sleep(3)#出現錯誤,停幾秒先
        time.sleep(0.5)#正常停頓,以免服務器拒絕訪問





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章