1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python新浪_Python模拟登录新浪微博

python新浪_Python模拟登录新浪微博

时间:2019-09-03 22:57:37

相关推荐

python新浪_Python模拟登录新浪微博

上一篇文章《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("/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 = '/login/'+action

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

三、完成验证码的验证

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

查看验证码

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

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

pwdname: '123456789', #你的密码

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

'remember':'',

'backURL':'/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官网上的说明。

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

控制台信息

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。