cookie模拟登录
抓取需要登录才能访问的页面
**cookie: 存放在客户端浏览器
session: 存放在Web服务器**
requests模块处理Cookie
**requests模块提供了session类,来实现客户端和服务端的会话保持**
1、实例化session对象
session = requests.session()
2、让session对象发送get或者post请求
res = session.post(url=url,data=data,headers=headers)
res = session.get(url=url,headers=headers)
浏览器原理: 访问需要登录的页面会带着之前登录过的cookie
程序原理: 同样带着之前登录的cookie去访问 - 由session对象完成
1、实例化session对象
2、登录网站: session对象发送请求,登录对应网站,把cookie保存在session对象中
3、访问页面: session对象请求需要登录才能访问的页面,session能够自动携带之前的这个cookie,进行请求
1、寻找Form表单提交地址 - 寻找登录时POST的地址
查看网页源码,查看form表单,找action对应的地址: http://www.renren.com/PLogin.do
2、发送用户名和密码信息到POST的地址
* 用户名和密码信息以什么方式发送? -- 字典
键 :<input>标签中name的值(email,password)
值 :真实的用户名和密码
post_data = {'email':'','password':''}
session = requests.session()
session.post(url=url,data=data)
"""方法三代码实现"""
import requests
from lxml import etree
class RenrenSpider(object):
def __init__(self):
self.post_url = 'http://www.renren.com/PLogin.do'
self.get_url = 'http://www.renren.com/967469305/profile'
self.session = requests.session()
def get_html(self):
form_data = {
'email' : 'xxxx',
'password' : 'xxxx'
}
self.session.post(url=self.post_url,data=form_data)
html = self.session.get(url=self.get_url).text
self.parse_html(html)
def parse_html(self,html):
parse_html = etree.HTML(html)
r_list = parse_html.xpath('//li[@class="school"]/span/text()')
print(r_list)
if __name__ == '__main__':
spider = RenrenSpider()
spider.get_html()