Xpath模拟登陆GitHub

PTYHON 爬虫


这是我用python2.7写的简单教程

准备工作
安装requests lxml模块

pip install requests
pip install lxml

requests文档
lxml文档
Xpath教程


实战应用

Xpath模拟登陆GitHub_第1张图片

首先进入GitHub登陆页面 https://github.com/login, 打开Chrome的开发者工具(F12),先尝试输入错误的密码观察浏览器是如何发送请求的。

Xpath模拟登陆GitHub_第2张图片

从浏览器的请求可以看到几个关键信息

  • 登陆的URL地址是https://github.com/session
  • 登陆需要提供的表单数据有5个
  • commit:Sign in
  • utf8:✓
  • authenticity_token: #这是一种防范CSRF攻击的方式,在请求地址中添加 token 并验证
  • login:Family-TreeSY
  • password:123456

然后按ctrl+u打开源代码页面,再按下ctrl+f打开搜索栏,查找authenticity_token

可以看到 name=”authenticity_token” 这也是Xpath需要查找的元素

xpath(‘//input[@name=”authenticity_token”]’)

理解了浏览器登陆时所需的数据获取方式后,就可以开始写代码用Python来模拟登陆了。

解析网页使用Xpath查找所需要的元素

import requests
from lxml import etree

LOGIN_URL = 'https://github.com/login'
SESSION_URL = 'https://github.com/session'

s = requests.session()
y = s.get(LOGIN_URL)
tree = etree.HTML(y.text)
ele = tree.xpath('//input[@name="authenticity_token"]')[0]

写入表单数据

data = {
    'commit': 'Sign in',
    'utf8': '✓',
    'authenticity_token': 'fwuV3HbD15A9BKiEJVtsEYEqzDv+r+yG9rj0uuFKLPtKjeK00ubWkbmKqQ6VJp9worJ5BVGMz3ZJV9Feyg9IKw==',
    'login': '用户名',
    'password': 'xxxxx'
}

使用POST请求

y = s.post(SESSION_URL, data=data)

登陆成功

y.url
Out[4]: u'https://github.com/session'

源码地址
欢迎访问我的博客Treehl的博客

你可能感兴趣的:(Xpath模拟登陆GitHub)