简书python_如何用python刷简书文章的浏览量

作者:bigtrace

大家在简书上发表文章,最喜欢关心今天又多了多少访问量和赞。当然不只是简书,大部分的博客网站或者音乐社交如QQ空间,网易云音乐,都会去记录文章或者音乐的浏览或收听次数。可是你知道具体网站是怎么做到吗?

首先访问量的增加需要当前没有用户登录,页面每刷新一次,阅读量就会增加一次。

已经有人在网上做过简单研究,我这里进行更深入的探讨,并且附上python实例来教你如何快速增加简书记录访问量。

d4174729470d

Replay XHR

该文中给我们提供了一个很简单的办法,那就是利用chrome自带的开发者工具,来对某一个post复制cURL的命令,然后再用command line 运行这项指令。这在chrome中就类似于replay XHR选项。 不停的点击这个选项来replay,就可以让简书识别出一次浏览行为.

当然这个方法简单粗暴,但是如何利用Python里面的pycURL库来实现呢?

首先我们需要具体找到这个post命令在哪儿,然后找出post所需要提交的data form是什么

d4174729470d

Post

我们通过对post分析,发现其提交了一个uuid的参数,而这个参数可以在第一次访问时,通过对该网页的源代码利用正则表达式找出。之后,这个uuid可以在多次POST中重复使用。

可是当通过提交uuid进行post,虽然发现其返回值为success,但访问量并未增加。于是我又对其进行更深入的分析,比如说看Request Header 和cookie 中是否存在关键变量,影响我们最终的结果。在不断的尝试过程中,我终于发现Request Header中需要增加Origin 和 Referer 两个参数, 之后再代入uuid进行post便可以成功刷新访问量。

顺便一提的是,我发现cookie中的Token 和_session_id在每次提交时都会变,便以为这两个便是我们想要找的参数,但根据测试,其实它们可有可无。最终结论是Request Header 中就以上Origin 和 Referer那两个参数最为重要。

实际应用

应用以上分析,我们可以利用Python 不停的调用此post 命令,来达到模拟增加访问量的目的。

下面附上代码:

提供你想访问的文章链接,和访问次数,即在code 中更改Post_link 和while循环的次数。

模拟101次浏览某文章,效果图如下:

d4174729470d

运行前

d4174729470d

output

d4174729470d

运行后

# 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.jianshu.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.jianshu.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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值