上一篇文章《Scrapy用Cookie实现模拟登录》完成了用Cookie实现模拟登录,绕开了用户名、密码和验证码登录的步骤。今天来比较一下以常规验证(用户名密码+验证码)的方式实现新浪微博的模拟登录,看看实现的过程中有哪些要注意的点。

一、分析登录URL和表单字段

为了更好分析登录验证过程,找到登录提交的URL和表单字段,选取了新浪微博手机版的页面进行追踪分析,采用的工具是chrome开发者工具Network功能。

手机版登录页面

1、查看源代码,了解基本表单字段

通过查看登录页源代码,了解登录的url,用户名字段mobile, 密码字段password_9771(是password加上一个随机数),还有一些隐藏字段vk, capId,以及验证码。

2、Network追踪登录过程

1)登录的完整表单字段:

Form Data记录

这些字段名和值需要先从登录页面抓取:

密码字段名不是一个固定的值,password+随机数

vk, capId是隐藏字段,登录时必须

code 是验证码

2)登录的全过程:

新浪微博的登录过程,第一步是提交用户名密码及其他参数,POST方法,后面经过4次重定向,完成登录。

查看新浪微博登录重定向过程

重定向都是通过location发送,get方法。理论上登录流程,重定向的过程不需要我们关心,但是Scrapy在发送登录请求时,会遇到种种问题,需要调试时,了解整个过程就很关键。

二、抓取登录表单及参数

1、先发送一个登录url请求:start_requests()方法

def start_requests(self):

return [Request("http://login.weibo.cn/login/", meta={'cookiejar': 1}, callback=self.pre_login)]

2、抓取登录的表单字段:pre_login()方法

def pre_login(self,response):

selector = Selector(response)

pwdname =selector.xpath('//input[@type="password"]/@name').extract()[0]

vk = selector.xpath('//input[@name="vk"]/@value').extract()[0]

imgsrc = selector.xpath('/html/body/div[2]/form/div/img[1]/@src').extract()[0]

index = imgsrc.find('cpt=')

capId = imgsrc[index+4:]

action = selector.xpath('/html/body/div[2]/form/@action').extract()[0]

action = 'http://login.weibo.cn/login/'+action

# ... ... next, 完成验证码验证,构造表单参数...

三、完成验证码的验证

在这里,我没有采用复杂的图片验证算法库,而是直接在控制台上把验证码的URL输出来,访问一下,手工填入的方式,codeimg = raw_input('please input image:'), 简单粗暴、快速准确。

查看验证码

四、构造表单参数,提交登录请求

data = {'mobile':'name@126.com', #你的微博帐号

pwdname: '123456789', #你的密码

'code': codeimg, #获取的验证码

'remember':'',

'backURL':'http://weibo.cn/u/2508944032', #登录后要访问url

'backTitle':u'手机新浪网',

'tryCount':'',

'vk':vk, #隐藏字段

'capId':capId, #隐藏字段

'submit':u'登录'}

yield FormRequest(url=action,meta={'cookiejar': response.meta['cookiejar']},headers=self.headers,formdata=data,callback=self.parse_item)

注意这里使用了FormRequest直接提交登录url和表单参数,而不是用FormRequest.from_response(),因为请求的登录url不一样。Scrapy官网《FormRequest.from_response()方法模拟用户登录》

OK,使用Scrapy完成新浪微博验证登录。在实现的过程也遇到不少问题,查看错误提示,不断调试。

可能是因为新浪微博登录参数和流程的更改,大家可以对比一下网络上的代码以及Scrapy官网上的说明。

下一步就是数据提取、保存。之前文章都有讲过。

控制台信息

python新浪_【图解】Python模拟登录新浪微博相关推荐

  1. 图解python专业教程_图解Python视频教程(基础篇)课程

    第2章HelloWorld:第一个Python程序 2-1在Windows操作系统中安装Python 2-2在MacOS操作系统中安装Python 2-3在Ubuntu操作系统中安装Python 2- ...

  2. python查询实时天气预报_微信公众号+python+新浪SAE实现实时天气预报功能

    本文主要谈谈如何做一个具有天气预报功能的公众号. 话不多说先上图,实现的功能如下图所示: 点击微信右下角的"+"号,分享任意一个位置信息,公众号后台自动回复当地的天气情况.这里的天 ...

  3. 模拟登录新浪微博-python

    模拟登录新浪微博(python) reference: http://www.jb51.net/article/46053.htm http://blog.csdn.net/u010487568/ar ...

  4. Python培训分享:python如何用cookie实现自动模拟登录?

    本期教程Python培训教程为大家带来的是python如何用cookie实现自动模拟登录?据小编的了解,python实现cookie自动登录,目前来说有许多第三方库都可以直接使用,这里以常用的requ ...

  5. Python 新浪实时新闻词云

    ''' Python 新浪实时新闻词云 by 郑瑞国 ''' from wordcloud import WordCloud import re import urllib.request impor ...

  6. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  7. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  8. scrapy模拟登录新浪微博

    hi: all, scrapy搞模拟登录真的很简单哦,以下均是在你安装scrapy成功的前提下哦. 首先,分析新浪微薄的登录流程,使用抓包工具得到下面的图片: 一般来说,登录主要就是对服务器进行pos ...

  9. curl模拟登录新浪微博

    curl模拟登录新浪微博 这几天要做个获取新浪微博@我的信息, 又不用第三方登录,所以只能通过模拟登录来获取信息,研究的一下发现直接模拟登录微博比较困难,验证的算法比较复杂,于是绕道通过登录新浪通行证 ...

最新文章

  1. ArrayAdapter的使用
  2. 关于IOCP完成端口的文章
  3. 【特征工程】不容错过的 5 种特征选择的方法!
  4. 安卓apk签名提取工具_Android测试工具入门介绍(二)
  5. 基于JAVA+SpringBoot+Mybatis+MYSQL的新闻发布系统
  6. rrdtool的安装
  7. Java自学之路(新手一定要看)
  8. erphpdown最新版下载v11.12,WordPress内容付费插件
  9. 【每日微信新闻早报简报】10月11日 星期五
  10. 第7章第29节:四图排版:四张图片并列排版 [PowerPoint精美幻灯片实战教程]
  11. msfvenom手册
  12. ChatGPT接入微信公众号(手把手教学)
  13. 入手python时踩过的坑——缩进篇
  14. WeiKuCMS多功能微信营销服务系统
  15. 个人站长如何接入支付打赏
  16. 007--python--英制单位英寸和公制单位厘米的互换
  17. php soapclient 异常,PHP SoapClient:SoapFault异常无法连接到主机
  18. 《Unity3D网络游戏实战》第7章
  19. 性能测试工具locust压测介绍
  20. CORD-19数据集以及相关分析代码介绍

热门文章

  1. 玲珑杯”ACM比赛 Round #15 D 咸鱼商店【二分+01背包】
  2. 世界各国实际利率存款利率支付利息收入所得税率利息差贷款利率(1960-2022)
  3. ## 以下代码主要实现对Word PPT等批量转换为 PDF
  4. 排队论模型之M/M/S模型
  5. 光学三维测量技术(一)
  6. pythonproperty装饰器_实例讲解Python编程中@property装饰器的用法
  7. 什么是Linux BSP?
  8. 实用工具网站合集【大自然的搬运工~】
  9. 数据结构 排序 思考题2
  10. 2021年全球鲍鱼行业调研及趋势分析报告