本页代码可以在这里下载。
首先模拟登录github,链接是http://www.github.com/login
首先观察请求,提交一个from data 其中包括5个参数,其中第三个不明确代表什么,所以猜测可能是一个加密参数。
我们清空cookies再访问界面,会发现源码中可以找到该参数,所以我们可以获取该参数然后构成表单数据。

我们首先可以发现,返回的源码是登录之后的界面,可以看到用户名。

这里使用session,可以保存的cookies,然后使用cookies访问别的界面,我们再获取到session后访问资料修改界面把用户名和博客地址爬取下来,观察用户名和博客地址并找到对应的XPath语句。

程序输出成功:

源码:
# -*- coding:utf-8 -*-
import requests
from lxml import etree
class Login():
def __init__(self):
self.headers = {
'referer': 'https://github.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'Host': 'github.com'
}
self.login_url = 'https://github.com/login'
self.post_url = 'https://github.com/session'
self.logined_url = 'https://github.com/settings/profile'
self.session = requests.Session()
def token(self):
response = self.session.get(self.login_url, headers=self.headers)
selector = etree.HTML(response.text)
token = selector.xpath('//div//input[2]/@value')
return token
def login(self, email, password):
post_data = {
'commit': 'Sign in',
'utf8': '✓',
'authenticity_token': self.token()[0],
'login': email,
'password': password
}
self.session.post(self.post_url, data=post_data, headers=self.headers)
response = self.session.get(self.logined_url, headers=self.headers)
if response.status_code == 200:
self.profile(response.text)
def profile(self, html):
selector = etree.HTML(html)
name = selector.xpath('//*[@id="user_profile_name"]/@value')[0]
email = selector.xpath('//*[@id="user_profile_blog"]/@value')[0]
print(name, '\n', email)
if __name__ == "__main__":
login = Login()
login.login(email='359366783@qq.com', password='000000')
0 条评论