爬虫学习----登录处理

一、处理登录表单

有一些网站需要登录或者输入验证码才可以进行访问,还有一种是评论等功能。因此,处理表单和登录成为进行网络爬虫不可或缺的一部分。这里涉及到提交表单向网页上传数据,我们通常发送请求有两种方式GET和POST。我们一般使用POST请求提交数据,因为查询字符串(名称/值)在POST请求的HTTP消息主体中,敏感信息不会出现在URL中,参数也不会被保存在浏览器历史或Web服务器日志中。因此,表单数据的提交基本上要用到POST请求。

1. 处理登录表单

我们使用作者提供的网站:http://www.santostang.com/wp-login.php。账号名:test,密码:a12345

处理登录表单可以分为两步:

(1)研究网站登录表单,构建POST请求的参数字典

(2)提交POST请求

第一步:打开网页,点击右键检查,点击左上角“鼠标”按钮,再在网页单机登录框这一区域,代码定位到登录框的位置。

定位账户名:name为key值,是log,输入值为value账户名

定位密码:name为key值,是pwd,输入值为value密码

记住登录信息:name为key值,是rememberme,value值为forever

登录部分:隐藏内容

找到这些登录需要用到的内容后,我们就可以构建表单,然后提交POST请求来登录网站了。下面是发送post请求代码。

import requests
session = requests.session()

post_url = 'http://www.santostang.com/wp-login.php'
agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'

headers = {
    'Host': 'www.santostang.com',
    'User-Agent': agent
}

post_data = {
    'pwd': 'a12345',
    'log': 'test',
    'rememberme': 'forever',
    'redirect_to': 'http://www.santostang.com/wp-admin/',
    'testcookie': 1
}

login_page = session.post(post_url, data= post_data, headers=headers)
print(login_page.status_code)

状态码:200

所需要提交的表单数据以字典的形式传递给服务器。获取请求数据。输出结果为200,请求正确。表示可以成功登录表单数据。

其他代码信息:

  • 303----重定向
  • 400----请求错误
  • 401----未授权
  • 403----禁止访问
  • 404----文件未找到
  • 500----服务器错

2. 处理cookie,让网页记住登录信息

cookie的作用是将登录状态记录下来,再次运行代码的时候可以直接获取之前的登录状态,不需要重新登录。当我们浏览网站时,session会跟踪我们的浏览记录并将数据存储在我们本地终端上,当重新访问该网站的时候,便会从cookies中找回之前浏览的信息,cookie也可以保存之前的登录信息,这样再次访问时,就是登录状态。使用如下代码保存cookie信息:

import requests
import http.cookiejar as cookielib

# 加载在计算机上的cookie
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookies')
try:
    session.cookies.load(ignore_discard=True)
except:
    print("Cookie 未能加载")
    
def isLogin():
    # 通过查看用户个人信息来判断是否已经登录
    url = "http://www.santostang.com/wp-admin/profile.php"
    login_code = session.get(url, headers=headers, allow_redirects=False).status_code
    if login_code == 200:
        return True 
    else: 
        return False

def login(secret, account):
    post_url = 'http://www.santostang.com/wp-login.php'
    post_data = {
    'pwd': 'a12345',
    'log': 'test',
    'rememberme': 'forever',
    'redirect_to': 'http://www.santostang.com/wp-admin/',
    'testcookie': 1
    }
    try:
        # 不需要验证码直接登录成功
        login_page = session.post(post_url, data=post_data, headers=headers)
        login_code = login_page.text
        print(login_page.status_code)
    except:
        pass
    session.cookies.save()
    
if __name__ == '__main__':
    agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    headers = {
    'Host': 'www.santostang.com',
    'User-Agent': agent
    }
    if isLogin():
        print("您已经登录")
    else:
        login('a12345', 'test')

在代码中,首先创建一个session,在session中尝试加载可能保存的cookie,如果是第一次登录,没有cookie,程序会输出“cookie未能加载”,如果cookie存在,则此步什么都没输出,然后用isLogin()访问该账户的个人信息页面,判断是否已经登录,如果已经登录,就是cookie加载成功,就直接用这个session访问其他网页获取数据。程序返回结果;您已经登录。

总结:在本片文章中,只讲述了登陆问题的处理,在书中还包括验证码的处理,这部分内容我们将在后面的学习中,在继续说。登陆问题的处理重点就是要提交哪些数据,这也是前期分析网页内容的重点。

上一篇文章:爬虫学习----解决中文乱码

注意:本篇学习笔记,是总结唐松老师的《Python网络爬虫从入门到实践》这本书的内容,如果想了解书中详细内容,请自行购买

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值