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

作者: bigtrace | 来源:发表于2017-05-18 22:09 被阅读455次

    作者:bigtrace

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

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

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

    浅谈简书文章阅读量

    Replay XHR

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

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

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

    Post

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

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

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

    实际应用

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

    下面附上代码:

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

    模拟101次浏览某文章,效果图如下:
    运行前 output 运行后
    # 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()
    

    相关文章

      网友评论

        本文标题:如何用python刷简书文章的浏览量

        本文链接:https://www.haomeiwen.com/subject/warexxtx.html