zoukankan      html  css  js  c++  java
  • Python爬虫入门教程 54-100 博客园等博客网站自动评论器

    爬虫背景

    爬虫最核心的问题就是解决重复操作,当一件事情可以重复的进行的时候,就可以用爬虫来解决这个问题,今天要实现的一个基本需求是完成“博客园“ 博客的自动评论,其实原理是非常简单的,提炼一下需求

    基本需求

    1. 登录博客园<不实现,登录单独编写博客>
    2. 调用评论接口
    3. 返回请求结果

    确定流程之后,基本就是找突破口的环节了

    实际的去评论一下,然后不管你用什么抓包工具都可以,只要抓取到你想要的数据,即可

    评论API如下

    Request URL: https://www.cnblogs.com/mvc/PostComment/Add.aspx
    Request Method: POST
    

    POST URL 有了,下面就是参数的问题

    我随便找了一个请求的参数

    {"blogApp":"wuxiaobin","postId":10510784,"body":"继续研究","parentCommentId":0}
    

    分析参数

    blogApp 是博主的用户昵称
    postid 是博文的ID
    body 评论主体
    parentCommentid 看参数命名知道应该是指的回复的那条ID

    分析到这里,你就可以开始模拟请求了,一般情况下是不成功的,因为我们没有登录,不过,代码先写起来

    观察请求头参数

    请求头基本包含一些用户信息,必备部分如下,剩下的就是cookies部分了

    origin: https://www.cnblogs.com
    referer: https://www.cnblogs.com/
    user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) 
    x-requested-with: XMLHttpRequest
    
    

    编写代码

    import requests
    import json
    
    class CnBlogs(object):
    
        def __init__(self):
            self._url = "https://www.cnblogs.com/mvc/PostComment/Add.aspx"
    
    
        def run(self):
            params = {
                "blogApp":"wuxiaobin",  # 博主ID
                "postId":10510784, # 评论博文的ID
                "body":"继续研究b",  # 评论内容
                "parentCommentId":0}
            headers = {
                "origin": "https://www.cnblogs.com",
                "referer": "https://www.cnblogs.com/",
                "user-agent": "浏览器UA",
                "x-requested-with": "XMLHttpRequest",
                "cookie":".CNBlogsCookie=重要参数;"
            }
            res = requests.post("https://www.cnblogs.com/mvc/PostComment/Add.aspx",data=params,headers=headers)
            print(json.loads(res.text))
    
    
    if __name__ == '__main__':
        cnblogs = CnBlogs()
        cnblogs.run()
    
    

    重要提示

    经过我的测试,发现判断博客园用户是否登录,关键的是cookie 这个在我之前的博客有涉及,2种写法,重点是你如何去获取,一般情况下,手动获取即可

    登录采用的是人机识别验证,这个我单独写一篇博文去研究,目前阶段,你手动获取即可

    博客园验证码
    其他的参数,在加载博客的时候,就可以用网页解析相关的知识解析出来,没有难度

    如何你想要做成全自动化的,也可以,只需要控制发帖时间随机,发帖内容随机即可,加上一个时间戳也是一个非常不错的解决方案

    发帖成功

    测试中一定要解析返回的JSON字符串,确定里面的成功和异常信息

    {
      'IsSuccess': True,
      'Message': '<div class="comment_my_posted">... ...</div>',
      'Duration': '171'
    }
    

    博客园自动评价Over

    所有网站的评论原理是相通的,你可以自行研究掘金,CSDN,简书等各种文章类平台,自动评论需要的是大量的用户,动态的IP,其余都不是问题~ 本文章仅供学习,切勿用于恶意用途。

  • 相关阅读:
    Debian 9/Ubuntu 18添加rc.local开机自启的方法
    第一次使用Debian9所遇到的问题
    Open-Falcon注册时点击Sign up按钮没反应
    使用VMware虚拟机里的Ubuntu18.04部署RAID 10磁盘阵列
    Ubuntu18.04下Ansible的基本使用
    Go语言求水仙花数(for循环)
    自研模块加载器(四) 模块资源定位-异步加载
    自研模块加载器(三) module模块构造器设计-模块数据初始化
    自研模块加载器(二) 加载器结构与设计导论
    自研模块加载器(一) 模块系统概述与自定义模块规范书写规定
  • 原文地址:https://www.cnblogs.com/happymeng/p/10612596.html
Copyright © 2011-2022 走看看