点击上方“小猿学 Python”,选择“置顶公众号”

作者:北岛知寒
链接:https://www.cnblogs.com/crazyacking/p/5232286.html

当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。

模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容。

实现微博登录的方法有很多,一般我们在模拟登录时首选WAP版。

因为PC版网页源码中包括很多的js代码,提交的内容也更多,不适合机器模拟登录。

我们实现微博登录的大体思路是这样的:

  • 用抓包工具把正常登录时要提交的字段都记录下来;
  • 模拟提交这些字段;
  • 判断是否登录成功;

原理很简单,让我们一步一步来实现吧。

一.抓包利器Fiddler

在电脑和互联网之间的通信是通过不同的数据包收发来实现的。

Fiddler可以从中间对数据进行拦截,拷贝一份数据以后再将数据发送给目的端。(这也是为什么说咖啡馆的公共WIFI不安全的原因)

同类的还有WireShark。为何这儿不用WireShark呢?

Wireshark太过于专业了,它可以实现抓取各种包,抓下来的包也很乱,针对性没Fiddler那么强。

下载安装
1.下载地址:http://www.telerik.com/fiddler
2.安装方法:fiddler依赖.Net环境,如果已经有则无需配置,直接点击下一步就行。

使用方法
1.启动Fiddler
2.配置Fiddler

点击左上角的“ WinConfig”,找到你使用的浏览器并勾选,点击“Save Changes”

3.使用Fiddler开始抓包

打开浏览器访问WAP版新浪微博网站weibo.cn

Fiddler窗口左侧找到weibo.cn /pub/的数据包,并双击,这时我们就能够在右侧看到抓取到的信息.

找到Cookies字段,这正是我们需要的.

二.Cookies与保持登录

通俗来说就是服务器端为了确认用户终端的身份而设定的一种加密标识,它是存储在本地终端上的。

当然,随着Cookies技术的发展,Cookies的作用已经不止于用户身份标识。

当登陆一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。

如果勾选了,那么下次访问同一个网站时,用户会发现没输入用户名和密码就已经登录了。

这正是因为前一次登陆时服务器发送了包含登录凭据(用户名+密码的某种加密形式)的Cookie到用户的硬盘上。

第二次登录时,如果该Cookies尚未到期,浏览器会发送该Cookies,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

三.Cookies模拟登录

下面将介绍使用 Fiddler 获取新浪微博 Cookies,然后使用 Requests 提交 Cookies 从而实现模拟登录。

  • 抓取登录数据包 使用Fiddler抓取数据包.

  • 获取Cookies 打开新浪微博WAP版页面(weibo.cn),点击登录,然后填写账号密码,勾选“记住登录状态”,切记要勾选此项.

登录成功后,从Fiddler中选择最新的那个weibo.cn,然后复制Cookies字段的内容,填写到代码内.

代码如下:

#!/usr/bin/env python#coding=utf8

""" Simulate a user login to Sina Weibo with cookie.You can use this method to visit any page that requires login."""

import urllib2import re

# get your cookie from Fiddler11cookie = 'your-cookie'headers = {   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0',   'cookie': cookie}

def visit():   url = 'http://weibo.com'   req = urllib2.Request(url, headers=headers)   text = urllib2.urlopen(req).read()

# print the title, check if you login to weibo sucessfully   pat_title = re.compile('(.+?)')   r = pat_title.search(text)   if r:       print(r.group(1))

if __name__ == '__main__':   visit() 

四.使用 Post 提交数据的方法实现模拟登录

由于使用Cookies登录存在很多的弊端,一般我们都使用Post提交数据的方法来实现模拟登录.

  • 通过Fiddler来抓取http数据包来分析该网站的登录流程;
  • 分析抓到的post包的数据结构和header,要根据提交的数据结构和heander来构造自己的post数据和header;
  • 构造自己的HTTP数据包,并发送给指定url;
  • 通过urllib2等几个模块提供的API来实现request请求的发送和相应的接收;

大部分网站登录时需要携带cookie,所以我们还必须设置cookie处理器来保证cookie.

如果遇到登录后网站重定向到其他url这种情况,我们可以使用chrome的审查元素功能找出重定向后的网站url和该网站的提交数据,再次使用post方法就行.

代码如下:

#!/usr/bin/python  

import HTMLParser  import urlparse  import urllib  import urllib2  import cookielib  import string  import re  

#登录的主页面  hosturl = '******' //自己填写  #post数据接收和处理的页面(我们要向这个页面发送我们构造的Post数据)  posturl = '******' //从数据包中分析出,处理post请求的url  

#设置一个cookie处理器,它负责从服务器下载cookie到本地,并且在发送请求时带上本地的cookie  cj = cookielib.LWPCookieJar()  cookie_support = urllib2.HTTPCookieProcessor(cj)  opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  urllib2.install_opener(opener)  

#打开登录主页面(他的目的是从页面下载cookie,这样我们在再送post数据时就有cookie了,否则发送不成功)  h = urllib2.urlopen(hosturl)  

#构造header,一般header至少要包含一下两项。这两项是从抓到的包里分析得出的。  headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',            'Referer' : '******'}  #构造Post数据,他也是从抓大的包里分析得出的。  postData = {'op' : 'dmlogin',             'f' : 'st',             'user' : '******', //你的用户名             'pass' : '******', //你的密码           'rmbr' : 'true',   //特有数据,不同网站可能不同             'tmp' : '0.7306424454308195'  //特有数据,不同网站可能不同             }  

#需要给Post数据编码  postData = urllib.urlencode(postData)  

#通过urllib2提供的request方法来向指定Url发送我们构造的数据,并完成登录过程  request = urllib2.Request(posturl, postData, headers)  print request  response = urllib2.urlopen(request)  text = response.read()  print text

spirngmvc如何实现直接输入网页重定向到登录_Python 模拟新浪微博登录相关推荐

  1. python判断网页密码加密方式_Python模拟网页中javascript加密与验证的相关处理

    在做网络爬虫的过程中你是否一些在这方面做的很好的网站,你向知道他是通过哪些相关的操作做出这么好的网站,以下就是文章的相关内容的具体介绍,希望你浏览完下面的内容会有所收获.Python模拟网页的java ...

  2. python账号密码一一对应_python模拟用户登录系统,如何两个用户输入各自的密码才能登入?...

    展开全部 #我可以把我自己2113的成果送你,你来研究5261研究 import json #用来存储数据4102的模块 import os #用来进行文件操作1653 import sys #获取脚 ...

  3. python的urllib2实现登录网页_python模拟网站登录(urllib、urllib2模拟登录)

    使用python模拟登录网站,首先要知道网站登录细节及相应的cookie. 分三步完成: 1,获取一个cookie 2,装载好自己的request 3,发送模拟登录请求 推荐阅读: Python模拟新 ...

  4. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

  5. python爬虫解决网页重定向问题

    python爬虫解决网页重定向问题 参考文章: (1)python爬虫解决网页重定向问题 (2)https://www.cnblogs.com/zhumengke/articles/9618368.h ...

  6. Shell——输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  7. [linux] shell 输入/输出重定向 、 文件包含

    Shell 输入/输出重定向 大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回​​到终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是自己的终端.同样,一个命令通常将 ...

  8. Python3.x爬虫教程:爬网页、爬图片、自己主动登录

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自己主动登录.并对HTTP协议做了一个简单 ...

  9. winform模拟登陆网页_【教程】模拟登陆网站 之 C#版(内含两种版本的完整的可运行的代码)...

    之前已经介绍过了网络相关的一些基础知识了: 以及简单的网页内容抓取,用C#是如何实现的: 现在接着来介绍,以模拟登陆百度首页: 为例,说明如何通过C#模拟登陆网站. 不过,此处需要介绍一下此文前提: ...

最新文章

  1. Oracle Exadata 一体机关机过程(虚拟机环境)
  2. P2730 魔板 Magic Squares (搜索)
  3. Nginx的页面中文乱码解决方法
  4. java中ftp删除文件,Java 实现ftp 文件上传、下载和删除
  5. eclipse中Preferences的一些设置
  6. C语言实用算法系列之strtok字符串分割、strcat字符串拼接、strcpy、strcmp
  7. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
  8. 【ELK】之Kibana使用
  9. Java服务器 dm Server
  10. [导入]Asp.Net MVC实践 - 探索UrlRouting并分析UrlHelper (基于ASP.NET MVC Preview 3)
  11. VXLAN简明学习笔记(原创)
  12. windows 驱动实现进程枚举
  13. Redis 模糊查询Key
  14. Excel表格中保护公式不被修改
  15. 计算机 未保存,电脑突然关机wps没保存怎么办
  16. linux服务器测网速,linux服务器如何测试网速?
  17. 使用第三方广告服务器的好处
  18. spring boot基于Java的电影院售票与管理系统毕业设计源码011449
  19. ES6新特性:解构、对象扩展、函数扩展、数组扩展、数值扩展
  20. 64位计算机装32位系统,32位装64位系统教程

热门文章

  1. java相对目录_java相对目录和绝对目录解析
  2. laravel改代码没变化_推荐10个优质的Laravel扩展
  3. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试
  4. 用keil4 模拟仿真显示引脚波形输出分析的步骤
  5. 计算机上开发和运行应用程序与操作系统无关,计算机期中测验理论部分和答案-C.doc...
  6. Android防火墙原型系统设计,Android系统网络安全性研究及防火墙设计
  7. oracle 中least,ORACLE 内置函数之GREATEST和LEAST
  8. edge浏览器如何把网页放到桌面_最强桌面浏览器
  9. bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
  10. 前端常见知识点三之HTML