python爬虫之自动登录discuz!刷分

  • python爬虫之自动登录discuz!刷分已关闭评论
  • 115 views
  • A+
所属分类:python
最近看论坛比较多,想提高在论坛的等级,就寻思着写个每天自动刷分的脚本。下面我们就从零开始用python实现一个自动登录,自动访问空间的脚本。我们就以https://www.hostloc.com/作为我们的实验对象。

环境要求

我们需要一个python3的执行环境,还有python包管理器pip,针对实现整个功能我们需要两个等三方的包urllib3BeautifulSoup4

基础定义

我们需要定义一个简单的类, 有usernamepassworduserAgenthostidentity_cookie_namecookies的一些属性。 我们把usernamepasswordhostidentity_cookie_name作为构造参数传入。

实现登录

在实现登录之前需要了解下urllib3的使用,通过这个库来发送http请求官方文档。为类实现一个公共的发送http方法,因为我们对同一个站点发送请求,基本cookieheader每次都是一样的。
Note: 如果你想要去掉urllib3https验证,你必须设置cert_reqs=ssl.CERT_NONE, assert_hostname=False这两个属性
因为urllib3头都是字符串形式,我们的cookies是定义成map形式,我们需要实现一个方法为它转换成cookie头形式。 解析Cookie是整个请求的中最重要的一步,当登录成功的时候需要记录所有服务端发送的cookie, 下请求下一次页面是需要把这些cookie发送给服务端。看上面的请求方法,我们是通过一个parseCookie的方法来解析cookie,来看看它是怎么实现的。 上面的代码只解析了cookie的名字和值, 不需要过期时间和路径这些。 登录的实现现有的代码里只需要发送请求,判断登录成功的cookie有没有即可。

用户信息

在成功登录之后就可以获取当前用户的积分威望金钱等信息。使用BeautifulSoup4库来匹配页面的html元素,它就像javascriptjQuery库一样获取DOM,就连API也非常相似,你可以官方文档来查看基本的使用。定义一个方法来打印当前的用户信息。随便定义一个主题页面作为访问入口。
python爬虫之自动登录discuz!刷分
上图的内容就是通过BeautifulSoup4获取出来的,我们不必自己写正则来获取。我们只使用了一个find来获取指定的内容,此函数也只会返回匹配的一条元素。

积分

discuz!中获取积分有多很种方式,访问他人主页、发表帖子、回复帖子、每日登录等等都可以获取促积分。我们只实现其中最简单一个访问他人主页,访问他人主页会自动加上积分。 我们将此方法加入到获取信息方法中,以信息页面中第一个用户作为访问入口,之后通过他最近访问的人随机一个作为访问入口,20次作为他的访问上限。 到此为止,基本流程已经走通。现在需要将获取的cookie写入到文件中,以保证下次执行不需要再次执行登录操作。我们将写入操作放在类的析构阶段,同时也需要在构造函数中读取cookie 你可能会问为什么在构造函数里面去打开文件,而不是在writeCookie里面去执行open操作。因为python__del__是不可以执行open操作的。我们已完成了整个操作。

推荐阅读

  1. 源码
  2. urllib3
  3. Beautiful Soup
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin