Python 自動刷部落格瀏覽量
哈哈,今天的話題有點那什麼了哈。咱們應該秉承學習技術的角度來看,那麼就開始今天的話題吧。
思路來源
今天很偶然的一個機會,聽到別人在談論現在的“刷量”行為,於是就激發了我的好奇心。然後看了下requests模組正好對我有用,就寫了一個簡單的測試用例。神奇的發現這一招竟然是管用的。那還等什麼,開刷咯。
前奏
思路很簡單,就是一個傳送請求的實現,就可以了。程式碼如下:
headers = {
'referer':'http://blog.csdn.net/',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
}
def getHtml(url,headers):
req = urllib2.Request(url,headers=headers)
page = urllib2.urlopen(req)
html = page.read()
return html
我們手動的新增一下目標url以及一個headers就可以了。我自然的會用自己的做下測試咯。
程式碼試著運行了一下,確實是可以增加瀏覽量滴。
慢增長
既然這樣的方案是可行的,那就說明思路是正確的了。於是我們自然會想到寫一個迴圈吧。這樣不就能實現大量的瀏覽的增加了嗎?
是的,我確實是這樣乾的。程式碼如下:
i= 0
while i < 10:
url = 'http://blog.csdn.net/marksinoberg/article/details/51501377'
getHtml(url,headers)
剛開始的時候,可以明顯的看到部落格數量的增加,(^__^) 嘻嘻……初見成效咯。但是好景不長,我發現瀏覽量增加了10次之後。就呵呵了。
然後就不能增加了,估計是伺服器對我這個訪問做了一定的限制了,否則按理說應該是可行的。
想方設法對坑
俗話說“上有政策,下有對策”,我自然不能受這個約束啊,於是我就猜想是對我的IP進行了記錄。然後對我的訪問次數添加了一些限制。
我的解決辦法:
代理IP進行訪問:但是考慮到沒有伺服器,所以代理不了IP進行訪問了。
改變IP:既然是這樣,那我就想辦法改變自己的ip來進行訪問唄。那麼怎麼改變自己的IP呢?(現在想想好後悔,當時計算機網路沒有好好聽課,IP欺騙沒有學好,否則現在不就可以用了嘛)。但是條條大路通羅馬嘛,我還有其他的方法。如下:
C:\Users\Administrator>ipconfig /release
Windows IP 配置
不能在 本地連線 上執行任何操作,它已斷開媒體連線。
無線區域網介面卡 無線網路連線:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::1d9f:d97b:fd16:1f6f%
預設閘道器. . . . . . . . . . . . . :
乙太網介面卡 本地連線:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . : OurEDA.cn
乙太網介面卡 VMware Network Adapter VMnet1:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::359d:e81d:741:f257%1
IPv4 地址 . . . . . . . . . . . . : 192.168.229.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
乙太網介面卡 VMware Network Adapter VMnet8:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::94b1:d10f:b68:101d%1
IPv4 地址 . . . . . . . . . . . . : 192.168.244.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
乙太網介面卡 VirtualBox Host-Only Network:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::a5eb:545c:7d89:9451%
IPv4 地址 . . . . . . . . . . . . : 192.168.56.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
隧道介面卡 isatap.{4F399971-B739-4B71-BD79-E48233EEC9BE}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.{1860C94E-1007-4418-9A26-7D8AA8F06E15}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.OurEDA.cn:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.dlut.edu.cn:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.{6F7F27ED-942E-4EFB-ACF2-A4E8793B161D}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
C:\Users\Administrator>ipconfig /renew
Windows IP 配置
不能在 本地連線 上執行任何操作,它已斷開媒體連線。
無線區域網介面卡 無線網路連線:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::1d9f:d97b:fd16:1f6f%12
IPv4 地址 . . . . . . . . . . . . : 192.168.58.70
子網掩碼 . . . . . . . . . . . . : 255.255.252.0
預設閘道器. . . . . . . . . . . . . : 192.168.56.1
乙太網介面卡 本地連線:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . : OurEDA.cn
乙太網介面卡 VMware Network Adapter VMnet1:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::359d:e81d:741:f257%14
IPv4 地址 . . . . . . . . . . . . : 192.168.229.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
乙太網介面卡 VMware Network Adapter VMnet8:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::94b1:d10f:b68:101d%15
IPv4 地址 . . . . . . . . . . . . : 192.168.244.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
乙太網介面卡 VirtualBox Host-Only Network:
連線特定的 DNS 字尾 . . . . . . . :
本地連結 IPv6 地址. . . . . . . . : fe80::a5eb:545c:7d89:9451%16
IPv4 地址 . . . . . . . . . . . . : 192.168.56.1
子網掩碼 . . . . . . . . . . . . : 255.255.255.0
預設閘道器. . . . . . . . . . . . . :
隧道介面卡 isatap.{4F399971-B739-4B71-BD79-E48233EEC9BE}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.{1860C94E-1007-4418-9A26-7D8AA8F06E15}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.OurEDA.cn:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.dlut.edu.cn:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
隧道介面卡 isatap.{6F7F27ED-942E-4EFB-ACF2-A4E8793B161D}:
媒體狀態 . . . . . . . . . . . . : 媒體已斷開
連線特定的 DNS 字尾 . . . . . . . :
是的,想必大家都看到了。核心的兩個命令就是
// 更改路由表的配置
ipconfig / release // 釋放網路,
ipconfig /renew // 重新分配IP
這樣基本上對於改變自己的IP是有點效果的。尤其是對區域網使用者而言。
所以,我只需要在Python程式碼中呼叫系統的cmd命令,就可以動態的改變自己的IP了。也就達成了我的需求了
難題
雖然IP的問題解決了,但是這樣刷的話,還是太慢。因為路由表的更新時需要時間的。而這和程式碼執行的速度比起來,真的是太慢太慢了。而且每次只能刷出十個瀏覽量,額。確實是比較的尷尬啊。費了這麼大的勁,才刷了十個瀏覽量。怎麼解決這個問題呢?
我其實也沒有真正的解決這個問題,但是我發現這個限制也是不特別的強,因為我中途吃了個飯,回來的時候就發現原來的IP又可以刷了。大概45分鐘左右的間隔吧!這是個突破點。
原始碼
其實思路很簡單,就是想方設法的針對問題解決問題。不管對方的系統多麼的堅固,也不可能是天衣無縫,總會有一種解決的辦法的。下面是程式碼。
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/5/26'
# __Desc__ = 測試測試 重新整理自己的部落格的瀏覽量
import urllib2,re
from bs4 import BeautifulSoup
def getHtml(url,headers):
req = urllib2.Request(url,headers=headers)
page = urllib2.urlopen(req)
html = page.read()
return html
def parse(data):
content = BeautifulSoup(data,'lxml')
return content
def getReadNums(data,st):
reg = re.compile(st)
return re.findall(reg,data)
url = 'http://blog.csdn.net/marksinoberg/article/details/51493318'
headers = {
'referer':'http://blog.csdn.net/',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
}
i = 0
while i<24:
html = getHtml(url,headers)
content = parse(html)
result = content.find_all('span',class_='link_view')
print result[0].get_text()
i = i +1
程式碼執行結果:
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/ulib2/AddWatcher.py
94人閱讀
95人閱讀
96人閱讀
97人閱讀
98人閱讀
99人閱讀
100人閱讀
101人閱讀
102人閱讀
103人閱讀
104人閱讀
105人閱讀
106人閱讀
107人閱讀
108人閱讀
109人閱讀
110人閱讀
111人閱讀
112人閱讀
113人閱讀
114人閱讀
115人閱讀
115人閱讀
115人閱讀
Process finished with exit code 0
比較好的地方就是使用了BeautifulSoup抓取了特定位置的資料,這裡是對瀏覽量的抓取。從上面的結果也可以看出,一個IP抓取的資料量是有限制的,一般來說是10~30個,這裡貌似是22次訪問。
展望
其實我是可以做到一次執行多次重新整理的效果的,但是這樣做不是特別的正派,所以我就說一下自己的思路吧。
對result(瀏覽量結果)做判斷,當出現連續的兩次結果一致的時候,開啟python執行cmd命令,更新自己的IP。但是這是個耗時操作,可以放到一個執行緒裡面
再就是對自己的部落格list介面進行抓取,獲得自己的所有的博文。當然,這裡很明顯會使用到模擬登陸。我之前寫過一個模擬登陸的博文,有需要的可以參考一下。模擬登陸。然後對每一個部落格進行刷量。這樣雖然沒有真正的解決問題,但是積少成多,也會起到一個不錯的效果。
做一個定時刷量的執行緒,每隔XX時間重新整理一遍。這樣一天下來,一篇文章大概也能實現幾百的訪問吧。(我沒試過,我也不知道)
等等吧
寫在最後的話
使用程式碼來提高自己的部落格訪問量的行為時可恥的,在這裡我首先做一下自我檢討。但是我是以解決問題的角度來看待這件事的,所以我很高興能和大家分享。
貌似並沒有從根本上解決瀏覽量重新整理的問題,想出了的也是幾個彌補性質 的方案。如果大家有好的建議,歡迎留下你的評論。