Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
来源:互联网 发布:给淘宝店铺起名字 编辑:程序博客网 时间:2024/06/11 20:05
问题引入
开始链家爬虫的时候,了解到需要实现模拟登录,不登录不能爬取三个月之内的数据,目前暂未验证这个说法是否正确,这一小节记录一下利用浏览器(IE11)的开发者工具去分析模拟登录网站(链家)的内部逻辑过程,花了一个周末的时间,部分问题暂未解决。
思路介绍
利用浏览器(IE11)的开发者工具,启用网络流量捕获,在调试之前,先做一些配置上的准备工作:清除旧的cookie和缓存,禁用跳转后清除日志(Firefox在开发工具的Settings设置中勾上启用持续日志)。
首先简要介绍一下模拟登录网站的基本逻辑,模拟网站登录需要知道,要向什么url地址,发送什么样的数据,GET请求还是POST请求。GET请求从服务器请求数据,不需要post data,但是经常需要在url后面加上对应的query parameter,类似?para1=value1¶2=value2之类的形式,本质上有点类似于post data。POST请求需要提供对应的post data,对应工具中的Request Body。而剩下的,是设置发送请求时的相关参数,包括user-agent等,对应工具中的Request Headers。提交请求后,网站服务器返回Response Headers和Response Body。其中,还经常涉及到cookie信息,在发送前,准备好,发送给服务器,服务器返回的信息中,往往也包含更新后的cookie值。
总结一下,主要关注点:Request Headers、Request Body、Response Headers、Response Body、Cookie。
打开IE11后,调出工具,切换到网络界面,打开链家,过滤HTML请求,可以看到,页面跳转到http://gz.lianjia.com/,服务器返回的Response Headers里面设置了一些cookie,如lianjia_ssid
和lianjia_uuid
。
点击登录,然后输入用户名和密码,正常登录。
找到登录网站所涉及的最核心的地址,对于此,我们可以通过搜索在哪里发送了我们的密码。可以看到,和我们密码相关的url地址为https://passport.lianjia.com/cas/login。即以后如果写代码,所要访问的url地址,就是这个地址了。
分析所提交的数据(post data)中的参数和值,这就是模拟网站登录的核心数据了,是在写代码时,对于url=https://passport.lianjia.com/cas/login提交POST请求时,要发送的一些参数和值。
username=XXXXXXXXXXXpassword=XXXXXXXXXXverifycode=service=http%3A%2F%2Fgz.lianjia.com%2Fisajax=truecode=lt=LT-99999-9HQFRxGdmePMdsCSnTeH9h2ne26uQbnWqN2
接下来,分析这些值是如何来的。例如lt值,搜索LT-99999,发现来自https://passport.lianjia.com/cas/prelogin/loginTicket?
分析Cookie,在最核心的地址https://passport.lianjia.com/cas/login的Request Headers中,lianjia_ssid
、lianjia_uuid
和JSESSIONID
,其中lianjia_ssid
、lianjia_uuid
通过先访问其他页面获取,现在接着去找名为JSESSIONID
的Cookie,是从哪里来的,所以,能想到的,就是先去搜索JSESSIONID
,搜索出来的第一个url地址是https://passport.lianjia.com/cas/prelogin/loginTicket?。很明显,其就是我们所期望的,因为其中的JSESSIONID
是通过Set-Cookie所获得的,是访问服务器的某个地址https://passport.lianjia.com/cas/prelogin/loginTicket?,然后服务器所返回的Cookie值。
而对于模拟登录网站中,所涉及的其他Cookie、其他参数的值,可参考上述的逻辑,去一点点分析,找到最终的某个值的来源,然后才能用程序模拟。
总结模拟登录链家的基本流程
至此,对于想要模拟登录链家的内部逻辑过程,基本上清楚了。
待解决问题
在通过Python实现的时候,利用如上的流程,发现实际上行不通,登录失败。这里提出几个未解决的问题。
如何验证模拟登录网站已成功了呢?
按理,在通过最后一步访问地址为https://passport.lianjia.com/cas/login时,带上账号、密码、提取的lt值,已获取JSESSIONID值的情况下,通过返回的html代码或cookie值,是可以判断模拟登录网站已成功的,然而在进一步分析数据来源的时候,发现有一个lianjia_token
在登录后的页面经常出现,不知在模拟登录过程中是否需要用到?是否需要获取到lianjia_token
才算成功?也不知是如何得到的?和JS脚本是否有关系?
微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。
- Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
- Python爬虫实战之爬取链家广州房价_03存储
- Python爬虫实战之爬取链家广州房价_01简单的单页爬虫
- Python爬虫实战之爬取链家广州房价_02把小爬虫变大
- python爬虫实践之模拟登录
- 转载:python爬虫实践之模拟登录
- Python爬虫之模拟登录总结
- python爬虫实践之模拟登录
- Python爬虫笔记之模拟登录
- 转载-Python爬虫之模拟登录总结
- Python爬虫之模拟CSDN网站登录
- python爬虫实战之模拟正方教务系统登录查询成绩
- Python爬虫实战五之模拟登录淘宝并获取所有订单
- python爬虫实战之模拟正方教务系统登录查询成绩
- Python爬虫实战五之模拟登录淘宝并获取所有订单
- Python爬虫 模拟登录
- Python爬虫实战——模拟登录教务系统
- Python 网络爬虫--简单的模拟登录
- 排它平方数
- Qt 对话框的使用
- 在线旅游OTA该如何理性对待微信小程序
- 构建远程服务器
- 疯狂的采药
- Python爬虫实战之爬取链家广州房价_04链家的模拟登录(记录)
- Spark(windows)登录openfire服务器时一直报账号密码错误
- (5)Air Band数字图像处理基础-图像的点运算
- bzoj 2561 最小割
- hdu1003 Max Sum(最大子序列和) —— dp
- 算法设计Week2 LeetCode Algorithms Problem #215 Kth Largest Element in an Array
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 2013上机二 八皇后问题8*8 任意两个皇后不在同行同列对角
- 关于趋势