Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)

问题引入

开始链家爬虫的时候,了解到需要实现模拟登录,不登录不能爬取三个月之内的数据,目前暂未验证这个说法是否正确,这一小节记录一下利用浏览器(IE11)的开发者工具去分析模拟登录网站(链家)的内部逻辑过程,花了一个周末的时间,部分问题暂未解决。

思路介绍

利用浏览器(IE11)的开发者工具,启用网络流量捕获,在调试之前,先做一些配置上的准备工作:清除旧的cookie和缓存,禁用跳转后清除日志(Firefox在开发工具的Settings设置中勾上启用持续日志)。

首先简要介绍一下模拟登录网站的基本逻辑,模拟网站登录需要知道,要向什么url地址,发送什么样的数据,GET请求还是POST请求。GET请求从服务器请求数据,不需要post data,但是经常需要在url后面加上对应的query parameter,类似?para1=value1&para2=value2之类的形式,本质上有点类似于post data。POST请求需要提供对应的post data,对应工具中的Request Body。而剩下的,是设置发送请求时的相关参数,包括user-agent等,对应工具中的Request Headers。提交请求后,网站服务器返回Response Headers和Response Body。其中,还经常涉及到cookie信息,在发送前,准备好,发送给服务器,服务器返回的信息中,往往也包含更新后的cookie值。

总结一下,主要关注点:Request HeadersRequest BodyResponse HeadersResponse BodyCookie

打开IE11后,调出工具,切换到网络界面,打开链家,过滤HTML请求,可以看到,页面跳转到http://gz.lianjia.com/,服务器返回的Response Headers里面设置了一些cookie,如lianjia_ssidlianjia_uuid

点击登录,然后输入用户名和密码,正常登录。

找到登录网站所涉及的最核心的地址,对于此,我们可以通过搜索在哪里发送了我们的密码。可以看到,和我们密码相关的url地址为https://passport.lianjia.com/cas/login。即以后如果写代码,所要访问的url地址,就是这个地址了。

分析所提交的数据(post data)中的参数和值,这就是模拟网站登录的核心数据了,是在写代码时,对于url=https://passport.lianjia.com/cas/login提交POST请求时,要发送的一些参数和值。

username=XXXXXXXXXXX
password=XXXXXXXXXX
verifycode=
service=http%3A%2F%2Fgz.lianjia.com%2F
isajax=true
code=
lt=LT-99999-9HQFRxGdmePMdsCSnTeH9h2ne26uQbnWqN2

复制代码

接下来,分析这些值是如何来的。例如lt值,搜索LT-99999,发现来自https://passport.lianjia.com/cas/prelogin/loginTicket?

分析Cookie,在最核心的地址https://passport.lianjia.com/cas/login的Request Headers中,lianjia_ssidlianjia_uuidJSESSIONID,其中lianjia_ssidlianjia_uuid通过先访问其他页面获取,现在接着去找名为JSESSIONID的Cookie,是从哪里来的,所以,能想到的,就是先去搜索JSESSIONID,搜索出来的第一个url地址是https://passport.lianjia.com/cas/prelogin/loginTicket?。很明显,其就是我们所期望的,因为其中的JSESSIONID是通过Set-Cookie所获得的,是访问服务器的某个地址https://passport.lianjia.com/cas/prelogin/loginTicket?,然后服务器所返回的Cookie值。

而对于模拟登录网站中,所涉及的其他Cookie、其他参数的值,可参考上述的逻辑,去一点点分析,找到最终的某个值的来源,然后才能用程序模拟。

总结模拟登录链家的基本流程

至此,对于想要模拟登录链家的内部逻辑过程,基本上清楚了。

顺序访问地址访问类型发送的数据需要获得/提取的返回的值
1http://gz.lianjia.com/GETlianjia_ssid, lianjia_uuid
2https://passport.lianjia.com/cas/prelogin/loginTicket?GET从返回的html中提取lt值,需要验证返回的Cookie中,是否包含JSESSIONID
3https://passport.lianjia.com/cas/loginPOSTpost data,其中lt值是之前提取出来的验证返回的html和Cookie

待解决问题

在通过Python实现的时候,利用如上的流程,发现实际上行不通,登录失败。这里提出几个未解决的问题。

如何验证模拟登录网站已成功了呢?

按理,在通过最后一步访问地址为https://passport.lianjia.com/cas/login时,带上账号、密码、提取的lt值,已获取JSESSIONID值的情况下,通过返回的html代码或cookie值,是可以判断模拟登录网站已成功的,然而在进一步分析数据来源的时候,发现有一个lianjia_token在登录后的页面经常出现,不知在模拟登录过程中是否需要用到?是否需要获取到lianjia_token才算成功?也不知是如何得到的?和JS脚本是否有关系?


您可能还想看

Hadoop/CDH

Hadoop实战(1)_阿里云搭建Hadoop2.x的伪分布式环境

Hadoop实战(2)_虚拟机搭建Hadoop的全分布模式

Hadoop实战(3)_虚拟机搭建CDH的全分布模式

Hadoop实战(4)_Hadoop的集群管理和资源分配

Hadoop实战(5)_Hadoop的运维经验

Hadoop实战(6)_搭建Apache Hadoop的Eclipse开发环境

Hadoop实战(7)_Apache Hadoop安装和配置Hue

Hadoop实战(8)_CDH添加Hive服务及Hive基础

Hadoop实战(9)_Hive进阶及UDF开发

Hadoop实战(10)_Sqoop import与抽取框架封装


微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。

转载请注明:转载自微信公众号「数据分析」


读者交流电报群:

https://t.me/sspadluo

转载于:https://juejin.im/post/5a640ce9f265da3e47447cbe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值