热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonurllib新浪微博_定向爬虫Python模拟新浪微博登录

阅读目录当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息。模拟登录是定向爬虫制作中一个必须克服的问题,

阅读目录

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

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

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

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

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

用抓包工具把正常登录时要提交的字段都记录下来;

模拟提交这些字段;

判断是否登录成功;

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

一.抓包利器Fiddler

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

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

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

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

下载安装

2.安装方法:fiddler依赖.Net环境,如果已经有则无需配置,直接点击下一步就行。

使用方法

1.启动Fiddler

2.配置Fiddler

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

3.使用Fiddler开始抓包

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

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

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

606573-20160301105711689-2146875839.png

二.COOKIEs与保持登录

关于COOKIEs

维基百科是这样解释的:

COOKIE(复数形态COOKIEs),中文名称为“小型文本文件”或“小甜饼”,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

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

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

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

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

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

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

三.COOKIEs模拟登录

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

抓取登录数据包

使用Fiddler抓取数据包.

获取COOKIEs

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

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

代码如下:

copycode.gif

#!/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 urllib2

import re

# get your COOKIE from Fiddler11

COOKIE = '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()

copycode.gif

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

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

通过Fiddler来抓取http数据包来分析该网站的登录流程;

分析抓到的post包的数据结构和header,要根据提交的数据结构和heander来构造自己的post数据和header;

构造自己的HTTP数据包,并发送给指定url;

通过urllib2等几个模块提供的API来实现request请求的发送和相应的接收;

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

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

代码如下:

copycode.gif

#!/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

copycode.gif



推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 我正在尝试使用scrapycrallsingle运行完美运行的scrapy蜘蛛,但我无法在python脚本中运行它.主要问题是从不执行SingleBlogSpider.parse方 ... [详细]
  • 一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A ... [详细]
  • Request对象和Response对象request:(请求)当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。Djang ... [详细]
  • AFNetworking、MKNetworkKit和ASIHTTPRequest比较
    2019独角兽企业重金招聘Python工程师标准之前一直在使用ASIHTTPRequest作为网络库,但是由于其停止更新,iOS7上可能出现更多的 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 注意:以下分析都是基于Retrofit2转载请注明出处:http:blog.csdn.netevan_manarticledetails51320637本节是《Retrofit的使 ... [详细]
  • \\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*if(string.IsNullOrEmpty(Tex ... [详细]
  • Cookie和Session的联系Cookie是在客户端保持状态,Session是在服务器端保持状态。由于服务器端保持状态在客户端也需要保存一个标识,所以Session需要借助于 ... [详细]
  • 有时候网站sqlserver数据库被挂马了,网上的很多软件与方法都是针对text小于8000的,这里的方法貌似可行,需要的朋友可以参考下。 ... [详细]
  • 应用场景B接口申请参数依赖于A接口返回的数据,心愿B接口发送申请的时候能获取A接口返回的数据作为申请参数。实现思路将A接口返回的数据通过后执行脚本赋值给一个全局变量或者环境变量。具体示例咱们一个接口B须要A接口返回的参数token作为本人的申请参数。常见的场景如:拜访一个须要登陆能力浏览的接口。1、准 ... [详细]
author-avatar
Rosalind33
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有