#coding:utf-8html
import requests
from lxml import etreegit
class Login(object):github
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/63.0.3239.132 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' # requests 库的Session ,它能够帮助咱们维持一个会话;自动处理cookies; self.session = requests.Session() def token(self): """ 获取初始页面的cookies;获取到authenticity_token; """ 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 } response = self.session.post(self.post_url, data=post_data, headers=self.headers) if response.status_code == 200: self.dynamics(response.text) response = self.session.get(self.logined_url, headers=self.headers) if response.status_code == 200: # print (response.text) self.profile(response.text) def dynamics(self, html): """ 提取了全部的动态信息,而后将其遍历输出。 """ selector = etree.HTML(html) dynamics = selector.xpath('//div[contains(@class, "news")]//div[contains(@class, "alert")]') for item in dynamics: dynamic = ' '.join(item.xpath('.//div[@class="title"]//text()')).strip() # print("dynamic: ", dynamic) def profile(self, html): """ 来处理我的详’情页信息;提取了我的的昵称和绑定的邮箱,而后将其输出 """ selector = etree.HTML(html) # print (selector.xpath('//input[@id="user_profile_name"]/@value')) name = selector.xpath('//input[@id="user_profile_name"]/@value') email = selector.xpath('//select[@id="user_profile_email"]/option[@value!=""]/text()') print(name, email)
if name == “main”:
login = Login()
login.login(email=‘xxxx.com’, password=‘xxxxxx’)web
[‘yang0103’] [‘1054822123@qq.com’]cookie