模拟登录是相当于制作一个脚本控制的机器人登录网站,然后进行网页数据采集的最开始的一个环节。由于是数据分析师爬虫不要求那么高的效率,因此对于那些需要登录的站点数据采集仅仅用模拟登录就可以解决大部分的问题。 整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。 ![]() 使用已知cookie登录基本原理cookie 保存在发起请求的客户端中,服务器利用cookie来区分不同的客户端。因为 http 是一种无状态的连接,当服务器同时收到好几个请求时,是无法判断出哪些请求是同一个客户端发起的。而 『访问登录后才能看到的页面』 这一行为恰恰需要客户端向服务器证明:『我是刚才登录过的那个客户端』。于是就需要cookie来标识客户端的身份,以存储它的信息(如登录状态)。 这也意味着只要得到了别的客户端的 cookie,就可以假冒成它来和服务器对话。比如说CSDN的登录就可以使用这个方法。 先用浏览器登录,然后使用开发者工具查看cookie。接着在程序中携带该 cookie 向网站发送请求,就能让程序假扮成刚才登录的那个浏览器,得到只有登录后才能看到的页面。 操作步骤
应用举例以我的新浪博客举例 ![]() import requestsimport sys#登录后才能访问的网页url = 'http://blog.sina.com.cn/u/2929542851'#浏览器登录后得到的cookie,也就是刚才复制的字符串,复制自己的即可cookie_str = r'xxxxxxxxxxxxxxxxx'#把cookie字符串处理成字典,以便接下来使用cookies = {}for line in cookie_str.split(';'): key, value = line.split('=', 1) cookies[key] = valuecookies 模拟登录后携带cookie访问基本原理在程序中向网站发出登录请求,也就是提交包含登录信息的表单(用户名、密码等)。从响应中得到 cookie ,今后在访问其他页面时也带上这个 cookie ,就能得到只有登录后才能看到的页面。 操作步骤
应用举例
模拟登录session登录状态保持基本原理session 是会话的意思。和cookie的相似之处在于,也可以让服务器『认得』客户端。简单理解把每一个客户端和服务器的互动当作一个『会话』。既然在同一个『会话』里,服务器自然就能知道这个客户端是否登录过。 具体步骤
应用举例import requestsimport sysimport io#sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码#登录时需要POST的数据填写你自己注册的信息data = {'Login.Token1':'学号', 'Login.Token2':'密码', 'goto:http':'//ssfw./cmstar/loginSuccess.portal', 'gotoOnFail:http':'//ssfw./cmstar/loginFailure.portal'}#设置请求头headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}#登录时表单提交到的地址(用开发者工具可以看到)login_url = 'http://ssfw./cmstar/userPasswordValidate.portal'#构造Sessionsession = requests.Session()#在session中发送登录请求,此后这个session里就存储了cookie#可以用print(session.cookies.get_dict())查看resp = session.post(login_url, data)#登录后才能访问的网页url = 'http://ssfw./cmstar/index.portal'#发送访问请求resp = session.get(url)print(resp.content.decode('utf-8')) 使用浏览器模拟器访问基本原理模拟器几乎可以对付任何网页,但会导致代码效率低。如果能在程序里调用一个浏览器来访问网站,那么像登录这样的操作就轻而易举了。 在Python中可以使用Selenium库来调用浏览器,写在代码里的操作(打开网页、点击……)会变成浏览器忠实地执行。这个被控制的浏览器可以是Firefox,Chrome等,但最常用的还是PhantomJS这个无头(没有界面)浏览器。 只要把填写用户名密码、点击『登录』按钮、打开另一个网页等操作写到程序中,PhamtomJS 就能登录上去,并返回响应。 操作步骤
![]() 应用举例
|
|