首頁  >  文章  >  後端開發  >  Python實現自動刷部落格瀏覽經驗分享

Python實現自動刷部落格瀏覽經驗分享

巴扎黑
巴扎黑原創
2017-08-08 15:58:362111瀏覽

本篇主要介紹了Python 自動刷部落格瀏覽量實例程式碼,小編覺得蠻不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

思路來源

今天很偶然的一個機會,聽到別人在談論現在的「刷量」行為,於是就激發了我的好奇心。然後看了下requests模組剛好對我有用,就寫了一個簡單的測試案例。神奇的發現這一招竟然是管用的。那還等什麼,開刷咯。

前奏

思路很簡單,就是一個發送請求的實現,就可以了。程式碼如下:


headers = {
  'referer':'http://jb51.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 = &#39;http://jb51.net/marksinoberg/article/details/51501377&#39;
  getHtml(url,headers)

剛開始的時候,可以明顯的看到部落格數量的增加,(^__^) 嘻嘻…初見成效咯。但好景不長,我發現瀏覽量增加了10次之後。就呵呵了。

然後就不能增加了,估計是伺服器對我這個存取做了一定的限制了,否則照理說應該是可行的。

想辦法對坑

俗話說“上有政策,下有對策”,我自然不能受這個約束啊,於是我就猜想是對我的IP進行了記錄。然後對我的訪問次數添加了一些限制。

我的解決方法:

  1. #代理IP進行存取:但是考慮到沒有伺服器,所以代理不了IP進行存取了。

  2. 改變IP:既然是這樣,那我就想辦法改變自己的ip來進行存取唄。那要怎麼改變自己的IP呢? (現在想想好後悔,當時電腦網路沒有好好聽課,IP欺騙沒有學好,否則現在不就可以用了嘛)。但是條條大路通羅馬嘛,我還有其他的方法。如下:

C:\Users\Administrator>ipconfig /release

Windows IP 設定

不能在本機連線上執行任何操作,它已斷開媒體連線。

無線局域網適配器無線網絡連接:

   連接特定的DNS 後綴. . . . . . . :
   本地鏈接IPv6 地址. . . . . . . . : fe80: :1d9f:d97b:fd16:1f6f%
   預設閘道. . . . . . . . . . . . . :

乙太網路介面卡本地連線:

##   媒體狀態 媒體狀態. . . . . . . . . . . : 媒體已斷開

   連接特定的DNS 後綴. . . . . . . : OurEDA.cn

乙太網路適配器VMware Network Adapter VM: OurEDA.cn

乙太網路適配器VMware Network Adapter VMnet1:

##   連接特定的DNS 後綴. . . . . . . :
   連接特定的DNS 後綴. . . . . . . :
   本地連結IPv6 位址. . . . . . . . : fe80::359d:e81d:741: IPvf257%11: 位址. . . . . . . . . . . . : 192.168.229.1
   子網路遮罩  . . . . . . . . . . . : 255.25. . . . .# . . . . . . . :

乙太網路介面卡VMware Network Adapter VMnet8:

   連接特定的DNS 後綴. . . . . . . :

   本地連結連結. . . . . . . : fe80::94b1:d10f:b68:101d%1
   IPv4 位址. . . . . . . . . . . . : 192.168.24.1168.24.1 掩體遮罩 # . . . . . . . . . . : 255.255.255.0
   預設閘道. . . . . . . . . . . . . :

#-On Network-OnirtualBox Host-Cost

   連接特定的DNS 字尾. . . . . . . :

   本地連結IPv6 位址. . . . . . . . : fe80::a5eb:545c:7d89:9451%#. . . . . . . . . . . : 192.168.56.1

   子網路遮罩  . . . . . . . . . . .#   子網路遮罩  . . . . . . . . . . . . . . . :


隧道適配器isatap.{4F399971-B739-4B71-BD79-E48233EEC9BE}:

   媒體狀態  . . . . . .
##   媒體狀態  . . . . .媒體. .

#. . 媒體狀態  : . . . . 媒體. .已斷開

   連接特定的DNS 後綴. . . . . . . :

隧道適配器isatap.{1860C94E-1007-4418-9A26-7D8AA8F06E15}:## 媒體狀態 媒體狀態。 . . . . . . . . . . . : 媒體已斷開
   連接特定的DNS 後綴. . . . . . . :

隧道適配器加總機。 ##   媒體狀態  . . . . . . . . . . . . : 媒體已斷開

   連接特定的DNS 後綴. . . . . . . :

is##111 號隧道配器。 .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__ = &#39;Mark sinoberg&#39;
#  __date__ = &#39;2016/5/26&#39;
#  __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,&#39;lxml&#39;)
  return content

def getReadNums(data,st):
  reg = re.compile(st)
  return re.findall(reg,data)

url = &#39;http://jb51.net/marksinoberg/article/details/51493318&#39;
headers = {
  &#39;referer&#39;:&#39;http://jb51.net/&#39;,
  &#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36&#39;
}
i = 0
while i<24:
  html = getHtml(url,headers)
  content = parse(html)
  result = content.find_all(&#39;span&#39;,class_=&#39;link_view&#39;)
  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次访问。

展望

其实我是可以做到一次运行多次刷新的效果的,但是这样做不是特别的正派,所以我就说一下自己的思路吧。

  1. 對result(瀏覽量結果)做判斷,當出現連續的兩次結果一致的時候,開啟python執行cmd指令,更新自己的IP。但這是個耗時操作,可以放到一個線程裡面

  2. 再就是對自己的博客list介面進行抓取,獲得自己的所有的博文。當然,這裡很明顯會使用到模擬登陸。然後對每一個部落格進行刷量。這樣雖然沒有真正的解決問題,但是積少成多,也會有一個不錯的效果。

  3. 做一個定時刷量的線程,每隔XX時間刷新一遍。這樣一天下來,一篇文章大概也能實現幾百的訪問吧。 (我沒試過,我也不知道)

以上是Python實現自動刷部落格瀏覽經驗分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn