Xpath模拟登陆GitHub
2017-10-20 本文已影响0人
Treehl
PTYHON 爬虫
这是我用python2.7写的简单教程
准备工作
安装requests lxml模块
pip install requests
pip install lxml
实战应用
首先进入GitHub登陆页面https://github.com/login, 打开Chrome的开发者工具(F12),先尝试输入错误的密码观察浏览器是如何发送请求的。
从浏览器的请求可以看到几个关键信息
- 登陆的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'