Python爬虫教程——模拟登录

转自:http://zqdevres.qiniucdn.com/data/20130909104208/index.html

前面 我们介绍了如何获取页面的部分内容 和 模拟浏览器发送请求

在前面的部分中 我们发送的请求使用的都是GET方法

在HTTP请求中 还有一种请求方法也很常用 那就是POST方法

GET方法是从服务器获取响应 POST方法是向服务器发送数据 然后接受响应


我们在登录一些网站的时候 输入用户名和密码通常都是以POST的方式发送到服务器的

如果我们想获取的页面 需要登录以后才可以到达 那么我们有两种方法可以解决这个问题

第一种 人工登录一次网站 记录登录时候的Cookies 然后在请求的时候讲Cookies添加到headers中 这样我们get我们需要的页面就可以了

第二种 我i们使用requests.session记录Cookies 然后在请求页面 这样的话我们就需要用爬虫模拟登录一下网站了


我们以博客园为例

登录页面 http://passport.cnblogs.com/login.aspx?ReturnUrl=http%3A%2F%2Fwww.cnblogs.com%2F

填写用户名密码 然后我们打开

firebug>network>all

点击登录

然后打开第一个请求

查看POST内容

然后我们将这里值都加入到 一个叫做data的字典中

data = {
    '__EVENTARGUMENT':'',   
'__EVENTTARGET':'', 
'__EVENTVALIDATION':    '/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05',
'__VIEWSTATE':  '/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt',
'btnLogin'  :'登 录',
'tbPassword':   '',
'tbUserName'    :'',
'txtReturnUrl': 'http://home.cnblogs.com/',
    }

然后我们建立requests.session对象s 并用s将数据POST到http://passport.cnblogs.com/login.aspx上

import requests
s = requests.session()
s.post(url='http://passport.cnblogs.com/login.aspx',data=data)

这样我们就已经成功了 然后我们就可以用s对象 去get登录后才能浏览的页面了

r=s.get('http://home.cnblogs.com/')
print r.text

你可能感兴趣的:(python)