推荐去我的博客里查看这篇文章,效果更佳:
http://fuxuemingzhu.cn/2017/08/12/byrbbs-login/

模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了。在网上和论坛上也有相关资料,但质量参差不齐,有些甚至不能实现模拟登录。因此,这里我使用requests库和urllib2库两种方法,分别实现了北邮人论坛的模拟登录。

教程所需环境:

  • Python 2.x
  • requests 库

requests库模拟登录北邮人论坛

教程的刚开始我们先优先使用最为方便的库:requests。

requests库的宣言是:

HTTP for Humans (给人用的 HTTP 库)

通过使用可以看出,requests库确实是当前Python处理网络请求最好用的库!强力推荐大家放弃urllib2库!

安装方式很简单:

pip install requests

安装完成之后,可以用下面的代码测试是否安装成功:

import requests

如果Python环境没有报错就说明安装成功,可以使用这个最方便的网络请求库了~

下面我们开始分析模拟登录的逻辑。

首先,打开论坛首页https://bbs.byr.cn/#!default,并且退出登录。

然后,按F12键审查元素,并且切换到Network选项卡,并且勾选上preserve log选项。现在的状态如下:

重点来了,输入用户名密码后点击登录,你应该能看到下面的信息:

可以看出向https://bbs.byr.cn/user/ajax_login.json发送了一个post请求,发送了正确的用户名密码之后,就能登录成功。

另外,经过测试得到,如果请求的头部不正确,论坛会拒绝登录,正确的方式是添加头部。必须添加下面的头部。

'x-requested-with': 'XMLHttpRequest'

下面是完整的登录代码,请输入自己的用户名和密码。

import requests

r_url = 'https://bbs.byr.cn/user/ajax_login.json'
my_header = {'x-requested-with': 'XMLHttpRequest'}
byr_data = {'id': 'fuxuemingzhu', 'passwd': '********'}
session = requests.Session()
req = session.post(r_url, data=byr_data, headers=my_header)
print(req.text)

运行结果,这说明运行代码执行成功:

{
"id": "fuxuemingzhu",
"user_name": "意涵团·负雪明烛 http://fuxuemingzhu.me",
"face_url": "https://static.byr.cn/uploadFace/F/fuxuemingzhu.120.jpg",
"face_width": 120,
"face_height": 120,
"gender": "m",
"astro": "未知",
"life": 365,
"qq": "",
"msn": "",
"home_page": "http://fuxuemingzhu.me/",
"level": "版主",
"is_online": true,
......
"ajax_code": "0005",
"ajax_msg": "操作成功"
}

这里有必要讲一下为什么使用了Session()的方式,这样可以使用时requests库能自动保存cookies到Session中,也就是说只要程序没关闭,就可以访问其他数据!

比如,我们查一下超神的信息:

quer = session.get("https://bbs.byr.cn/user/query/zc199102.json", headers=my_header)
print(quer.text)

返回结果如下:

{
"id": "zc199102",
"user_name": "超byr||呐,你们的小企鹅~",
"face_url": "https://static.byr.cn/uploadFace/Z/zc199102.502.gif",
"face_width": 100,
"face_height": 75,
"gender": "m",
"astro": "未知",
"life": 365,
"qq": "",
"msn": "",
"home_page": "",
"level": "用户",
"is_online": true,
......
"ajax_code": "0005",
"ajax_msg": "操作成功"
}

根据这个原理你可以查看任意用户的公开信息,或者把整个论坛爬下来。

urllib2库模拟登录北邮人论坛

urllib2库是Python自带的库,并且已经在Python3中取消。这就是我不再推荐的原因,另外下面冗长的代码也可以看出,这个库不好用。

urllib2库不支持自动管理cookies,需要导入cookielib包进行管理。因为登录的逻辑上文已经分析过,所以,这里直接贴上代码。

import cookielib
import urllib2
import urllib auth_url = 'https://bbs.byr.cn/user/ajax_login.json'
data = {'id': '*********', 'passwd': '*********', }
post_data = urllib.urlencode(data)
my_header = {'x-requested-with': 'XMLHttpRequest'} cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
urllib2.install_opener(opener)
req = urllib2.Request(auth_url, post_data, headers=my_header)
b = opener.open(req)
print(str(b.read()).encode('utf-8'))
user_url = "https://bbs.byr.cn/user/query/zc199102.json"
req_user = urllib2.Request(user_url, headers=my_header)
a = opener.open(req_user)
print(str(a.read()).encode('utf-8'))

执行后应该有和requests库同样的结果。

结语

刚开始写这个模拟登录的时候还是个Python的小白,当时只会使用urllib2库,因为reqeusts库需要安装,所以就特别害怕去尝试新东西。

但是,尝试之后简直发现了新世界。requests库同时支持python2和3,这点就比urllib2方便。从上文的代码对比也能更加看出requests库的强大。

如果你没用过requests库,那么我强烈推荐你尝试,你会彻底抛弃urllib2的。

人生苦短,我用Python。如果你也在用Python,那么肯定像我一样希望节省更多的时间,因此,有更好用的东西就去尝试吧!不要害怕折腾。

Python实现北邮人论坛模拟登录的更多相关文章

  1. Python爬虫实战五之模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 温馨提示 更新时间,2016-02-01,现在淘宝换成了滑块验证了 ...

  2. python RSA加密解密及模拟登录cnblog

    1.公开密钥加密 又称非对称加密,需要一对密钥,一个是私人密钥,另一个则是公开密钥.公钥加密的只能私钥解密,用于加密客户上传数据.私钥加密的数据,公钥可以解密,主要用于数字签名.详细介绍可参见维基百科 ...

  3. Python结合NC.exe 实现模拟登录&批量填表

    1.工作需求 有很多事项,每个事项分为:名称.种类.时间等,需要把每个事项逐个输入到网页中并提交. 如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“ ...

  4. 基于python的request库,模拟登录csdn博客

    以前爬虫用urllib2来实现,也用过scrapy的爬虫框架,这次试试requests,刚开始用,用起来确实比urllib2好,封装的更好一些,使用起来简单方便很多. 安装requests库     ...

  5. Python网络爬虫实战(四)模拟登录

    对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...

  6. python中使用cookie进行模拟登录

    背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...

  7. urllib库利用cookie实现模拟登录慕课网

    思路 1.首先在网页中使用账户和密码名登录慕课网 2.其次再分析请求头,如下图所示,获取到请求URL,并提取出cookie信息,保存到本地 3.最后在代码中构造请求头,使用urllib.request ...

  8. 在Python中用Request库模拟登录(三):Discuz论坛(未加密,有验证码,有隐藏验证)

    以Discuz的官方站为例.直接点击网页右上角的登录按钮,会弹出一个带验证码的登录窗口.输入验证码之后,会检查验证码是否正确.然后登录.首先,通过抓包分析,这些过程浏览器和服务器交换了哪些数据. 抓包 ...

  9. 【Python数据分析】Python模拟登录(一) requests.Session应用

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

随机推荐

  1. nrf 51802 和 nrf51822 的区别于联系

    51802QFAA与51822QFAA在FLASH 跟RAM的容量没有差别:区别在于:a,接收灵敏度 51802是-91dBm;51822是-93dBm,这个差异导致接收距离有差异:b,Tx Powe ...

  2. 【模板】最小费用最大流(网络流)/洛谷P3381

    题目链接 https://www.luogu.com.cn/problem/P3381 题目大意 输入格式 第一行包含四个正整数 \(n,m,s,t\),分别表示点的个数.有向边的个数.源点序号.汇点 ...

  3. 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用

    一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 APM,专为云原 ...

  4. Z可读作zed的出处?

    Commercial and international telephone and radiotelephone SPELLING ALPHABETS between World War I and ...

  5. Flink(九)【Flink的重启策略】

    目录 1.Flink的重启策略 2.重启策略 2.1未开启checkpoint 2.2开启checkpoint 1)不设置重启策略 2)不重启 3)固定延迟重启(默认) 4)失败率重启 3.重启效果演 ...

  6. HDFS【Java API操作】

    通过java的api对hdfs的资源进行操作 代码:上传.下载.删除.移动/修改.文件详情.判断目录or文件.IO流操作上传/下载 package com.atguigu.hdfsdemo; impo ...

  7. 【并发编程】Java并发编程-看懂AQS的前世今生

    在我们可以深入学习AbstractQueuedSynchronizer(AQS)之前,必须具备了volatile.CAS和模板方法设计模式的知识,本文主要想从AQS的产生背景.设计和结构.源代码实现及 ...

  8. Project Reactor工厂方法和错误处理

    工厂方法创建流 Backpressure : the ability for the consumer to signal the producer that the rate of emission ...

  9. SSM框架整合后使用pagehelper实现分页功能

    一.导入pagehelper-5.1.10.jar和jsqlparser-3.1.jar两个jar包 二.配置pagehelper 2.1 在mybatis配置文件中配置 <plugins> ...

  10. Pycharm, 添加requirements.txt

    引用:https://www.jetbrains.com/help/pycharm/managing-dependencies.html 1) 2) 3)