第4节---模拟登陆知乎

上一节爬取了知乎美女精华话题下的子问题,并不需要登陆,直接抓取页面就可以了。但有些页面需要登陆后才可见。

比如 https://www.zhihu.com/topic

登陆状态下是



非登陆状态



当提到登陆,必须对Http协议有一些了解,推荐《图解Http》。

通俗的说,HTTP 是一种无状态的协议, 协议本身不保留之前的一切请求信息和响应信息,也就是说,对于一个刚刚发送了 HTTP 请求的客户端再次发起请求时,服务端并不知道之前访问过。假设要求登陆认证的Web页面本身无法进行状态的管理(不记录已登录状态),那么每次跳转新页面不是要再次登陆,就是要在每次请求报文中附加参数来管理登陆状态。于是引入Cookie技术。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

1. 浏览器第一次发起 HTTP 请求时,没有携带任何 Cookie 信息,服务器收到请求并返回给浏览器的HTTP响应,同时 
HTTP 响应包括了一个响应头 Set-Cookie 字段,它的值是要设置的 Cookie。 
2. 浏览器收到来自服务器的 HTTP 响应,响应头中发现有 Set-Cookie 字段,就会将该字段的值保存在内存或者硬盘中。 
3. 浏览器下次给该服务器发送 HTTP 请求时, 会将 Cookie 信息附加在 HTTP 请求的头字段 Cookie 中。 
4. 服务器收到这个HTTP请求,发现请求头中有Cookie字段, 便知道之前就和这个用户打过交道了。 

如何实现模拟登陆呢

首先进入知乎登陆界面https://www.zhihu.com/#signin,F12打开开发者工具,Network栏,我们试着错误的输入一个账号密码

在左下角找到email


从浏览器的请求可以发现几个关键的信息 

1.登陆的URL为https://www.zhihu.com/login/email

2.登录需要提供的表单数据有5个:用户名(email)、密码(password)、验证码(captcha)、验证码的类型(captcha_type)、_xsrf。 

3. 获取验证码的URL地址是https://www.zhihu.com/captcha.gif?r=1495682872878&type=login&lang=cn

xsrf是一串伪随机 
数,它是用于防止跨站请求伪造的。它一般存在网页的 form 表单标签中,为了证实这一点,可以在页面上搜索 “xsrf”,果 
然,从下图可以看到 _xsrf在一个隐藏的 input 标签中 




https://www.zhihu.com/#signin发起登陆请求

下载登陆页面,再从源代码中抽取

获取xsrf

public String get_xsrf(){
		String page = getHtmlPage("https://www.zhihu.com");
		Document doc = Jsoup.parse(page);
		Elements srfs = doc.getElementsByAttributeValue("name", "_xsrf");
		String xsrf = srfs.first().attr("value");
		return xsrf;
	}


中文验证码暂时解决不了,但实验多次后发现有手动输入的字符验证码。

这样的验证码少了一个参数captcha_type



所以只需要将验证码图片下载到本地在对应的设置参数就行了。首先是下载验证码图片,通过对页面源代码的分析并没有找到图片,那就应该是通过js传过来的


图片中的r是个随机数,只需要像_xsrf一样请求相应的地址就行了,下载图片,从控制台输入的方式设置验证码参数。即在首次登录是下载验证码到本地之后人工查看验证码之后控制台输入验证码设置到请求参数中


留坑,待更新。。。。。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
知乎是一个知识分享平台,也是一个社交问答的平台。在知乎上,用户可以提出问题,也可以回答其他用户的问题,共同交流和分享知识。而x-zse-96是一个用户在知乎上的用户名,代表了这个用户在知乎上的个人身份。 知乎为用户提供了一个广阔的知识世界,用户可以在这里找到各种各样的问题和答案,涵盖了生活、科技、文化、艺术等各个领域。在知乎上,用户可以向其他人请教问题,也可以分享自己的知识和经验,进行知识的交流和探讨。通过回答他人的问题,用户可以向其他人展示自己的专业知识和见解,也可以通过其他人的回答来扩展自己的知识面。 而x-zse-96作为一个知乎用户,在知乎上也可以发挥自己的作用。用户可以根据自己的兴趣和专业领域,回答其他用户的问题,分享自己的知识和经验。通过在知乎上的互动,用户可以结识到志同道合的人,参与到各种讨论和话题中。 知乎作为一个知识分享平台,追求高质量的内容和专业的讨论。在知乎上,用户可以查找到各种有深度的问题和答案,扩展自己的知识和视野。同时,用户也可以通过关注感兴趣的话题和用户,得到最新的信息和讨论。知乎致力于打造一个开放、包容、有质量的知识社区,为用户提供一个学习和成长的平台。对于x-zse-96这个用户来说,知乎是他分享和获取知识的地方,也是他展示自己的才华和见解的舞台。通过知乎,他可以与全世界的用户进行交流和互动,共同探索和传播知识的力量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值