作者:bigtrace
大家在簡書上發(fā)表文章已旧,最喜歡關(guān)心今天又多了多少訪問量和贊裕寨。當(dāng)然不只是簡書,大部分的博客網(wǎng)站或者音樂社交如QQ空間疚察,網(wǎng)易云音樂蒸走,都會去記錄文章或者音樂的瀏覽或收聽次數(shù)∶驳眨可是你知道具體網(wǎng)站是怎么做到嗎比驻?
首先訪問量的增加需要當(dāng)前沒有用戶登錄,頁面每刷新一次岛抄,閱讀量就會增加一次别惦。
已經(jīng)有人在網(wǎng)上做過簡單研究,我這里進行更深入的探討夫椭,并且附上python實例來教你如何快速增加簡書記錄訪問量掸掸。
該文中給我們提供了一個很簡單的辦法,那就是利用chrome自帶的開發(fā)者工具益楼,來對某一個post復(fù)制cURL
的命令猾漫,然后再用command line 運行這項指令点晴。這在chrome中就類似于replay XHR
選項感凤。 不停的點擊這個選項來replay,就可以讓簡書識別出一次瀏覽行為.
當(dāng)然這個方法簡單粗暴粒督,但是如何利用Python里面的pycURL
庫來實現(xiàn)呢陪竿?
首先我們需要具體找到這個post命令在哪兒,然后找出post所需要提交的data form是什么
我們通過對post分析屠橄,發(fā)現(xiàn)其提交了一個uuid
的參數(shù)族跛,而這個參數(shù)可以在第一次訪問時,通過對該網(wǎng)頁的源代碼利用正則表達式找出锐墙。之后礁哄,這個uuid
可以在多次POST中重復(fù)使用。
可是當(dāng)通過提交uuid
進行post溪北,雖然發(fā)現(xiàn)其返回值為success桐绒,但訪問量并未增加。于是我又對其進行更深入的分析之拨,比如說看Request Header
和cookie
中是否存在關(guān)鍵變量茉继,影響我們最終的結(jié)果。在不斷的嘗試過程中蚀乔,我終于發(fā)現(xiàn)Request Header
中需要增加Origin
和 Referer
兩個參數(shù)烁竭, 之后再代入uuid
進行post便可以成功刷新訪問量。
順便一提的是吉挣,我發(fā)現(xiàn)cookie中的Token
和_session_id
在每次提交時都會變派撕,便以為這兩個便是我們想要找的參數(shù)婉弹,但根據(jù)測試,其實它們可有可無终吼。最終結(jié)論是Request Header
中就以上Origin
和 Referer
那兩個參數(shù)最為重要马胧。
實際應(yīng)用
應(yīng)用以上分析,我們可以利用Python 不停的調(diào)用此post 命令衔峰,來達到模擬增加訪問量的目的佩脊。
下面附上代碼:
提供你想訪問的文章鏈接,和訪問次數(shù)垫卤,即在code 中更改Post_link
和while
循環(huán)的次數(shù)威彰。
模擬101次瀏覽某文章,效果圖如下:
# coding=utf-8
import pycurl
import urllib
from StringIO import StringIO
import json
import re
# class definition
class shua_view_class:
def __init__(self,link):
self.website = unicode(link)
self.configure()
def shouye(self):
buffer = StringIO()
self.c.setopt(pycurl.URL, self.website)
self.c.setopt(pycurl.POST, 0)
self.c.setopt(self.c.WRITEDATA, buffer)
self.c.perform()
body = buffer.getvalue().decode('utf-8')
self.uuid = re.search(r"uuid\":\"(.+)\"}", body).group(1)
view_count = re.search(r"views_count\":(\d+)", body).group(1)
#print self.uuid
print "view:" + str(view_count)
def configure(self):
self.c = pycurl.Curl()
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
self.c.setopt(pycurl.HTTPHEADER, ['Origin: http://www.reibang.com', 'Referer: '+self.website]) # this line is very important to if we can succeed!
self.c.setopt(self.c.FOLLOWLOCATION, 1)
self.c.setopt(pycurl.VERBOSE, 0)
self.c.setopt(pycurl.FAILONERROR, True)
self.c.setopt(pycurl.USERAGENT, USER_AGENT)
def shuaview(self):
data_form = {
'uuid': self.uuid,
}
# print data_form
buffer = StringIO()
data_post = urllib.urlencode(data_form)
url = self.website.replace("/p/","/notes/") + '/mark_viewed.json'
#print url
self.c.setopt(pycurl.URL, url)
self.c.setopt(pycurl.POST, 1)
self.c.setopt(pycurl.POSTFIELDS, data_post)
self.c.setopt(self.c.WRITEFUNCTION, buffer.write)
self.c.perform()
response = buffer.getvalue()
response_json = json.loads(response)
def exit(self):
self.c.close()
# main function
Post_link="http://www.reibang.com/p/120ab95ecef3"
n = 0
app=shua_view_class(Post_link)
app.shouye() # check the view number before we shua view
while True:
app.shuaview()
n += 1
if n > 100: # add 101 more views
break
app.shouye() # check the view number after we shua view
app.exit()