requests的session不同于服务器的session,这里的session只是requests的一个方法, requests的模拟登录需要用到这个方法.
首先实例化session:
s = requests.session()
通过对这个方法传入用户名和密码,需要定义一个字典(这里的email和password是网站上登录框里的对应属性):
form_data = {
'email': '用户名',
'password': '密码'
}
把用户名和密码传给session后,通过向网站发起post登录请求, 再用"登录"的session向需要的页面发起get请求,这样就get到了登录过的页面.
s.post(post_url, data=form_data)
# res 为登录后的响应页面
res = self.session.get(url)
下面是全部 的代码, 代码只对页面的学校信息进行了输出打印
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/599512731/profile'
# 实例化session对象
self.session = requests.session()
def get_html(self):
form_data = {
'email': '用户名',
'password': '密码'
}
self.session.post(self.post_url, data=form_data)
res = self.session.get(self.get_url)
res.cookies.update()
res.encoding = 'utf-8'
html = res.text
self.parse_html(html)
@staticmethod
def parse_html(html):
parse_html = etree.HTML(html)
r_list = parse_html.xpath('//*[@id="operate_area"]/div[1]/ul/li[1]/span/text()')[0].strip()
print(r_list)
if __name__ == '__main__':
spider = RenRenSpider()
spider.get_html()
```