Python 爬虫模拟登陆知乎_python

在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率。由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了一下python模拟登陆,网上关于这部分的资料很多,很多demo都是登陆知乎的,原因是知乎的登陆比较简单,只需要post几个参数,保存cookie。而且还没有进行加密,很适合用来做教学。我也是是新手,一点点的摸索终于成功登陆上了知乎。就通过这篇文章分享一下学习这部分的心得,希望对那些和我一样的初学者有所帮助。

  先来说一下,爬虫模拟登陆的基本原理吧,我也是刚开始接触对于一些深层次的东西也不是掌握的很清楚。首先比较重要的一个概念就是cookie,我们都知道HTTP是一种无状态的协议,也就是说当一个浏览器客户端向服务器提交一个request,服务器回应一个response后,他们之间的联系就中断了。这样就导致了这个客户端在向服务器发送请求时,服务器无法判别这两个客户端是不是一个了。这样肯定是不行的。这时cookie的作用就体现出来了。当客户端向服务器发送一个请求后,服务器会给它分配一个标识(cookie),并保存到客户端本地,当下次该客户端再次发送请求时连带着cookie一并发送给服务器,服务器一看到cookie,啊原来是你呀,这是你的东西,拿走吧。所以一个爬虫模拟登陆就是要要做到模拟一个浏览器客户端的行为,首先将你的基本登录信息发送给指定的url,服务器验证成功后会返回一个cookie,我们就利用这个cookie进行后续的爬取工作就行了。

   我这里抓包用的就是chrome的开发者工具,不过你也可以使用Fiddler、Firebug等都可以,只不过作为一名前端er对chrome有一种特殊的喜爱之情。准备好工具接下来就要打开知乎的登陆页面并查看https://www.zhihu.com/#signin 我们可以很容易发现这个请求 发送的就是登录信息,当然我使用手机登陆的 用邮件登陆的是最后结尾是email

所以我们只需要向这个地址post数据就行了

phone_num 登录名
password 密码
captcha_type 验证码类型(这个参数着这里并没有实质作用)
rember_me 记住密码

_xsrf 一个隐藏的表单元素 知乎用来防御CSRF的(关于CSRF请打开这里) 我发现这个值是固定所以就在这里直接写死了 若果有兴趣的同学可以写一个正则表达式 把这部分的值提取出来 这样更严谨一些。

# -*- coding:utf-8 -*-
import urllib2
import urllib
import cookielib
posturl = 'https://www.zhihu.com/login/phone_num'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/52.0.2743.116 Safari/537.36',
'Referer':'https://www.zhihu.com/'
}
value = {
'password':'*****************',
'remember_me':True,
'phone_num':'*******************',
'_xsrf':'**********************'
}
data=urllib.urlencode(value)
#初始化一个CookieJar来处理Cookie
cookieJar=cookielib.CookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cookieJar)
#实例化一个全局opener
opener=urllib2.build_opener(cookie_support)
request = urllib2.Request(posturl, data, headers)
result=opener.open(request)
print result.read()

当你看到服务器返回这个信息的时候就说明你登陆成功了

{"r":0,
"msg": "\u767b\u5f55\u6210\u529f"
}#翻译过来就是 “登陆成功” 四个大字

然后你就可以用这个身份去抓取知乎上的页面了

page=opener.open("https://www.zhihu.com/people/yu-yi-56-70")
content = page.read().decode('utf-8')
print(content)

这段代码就是通过实例化一个opener对象保存成功登陆后的cookie信息,然后再通过这个opener带着这个cookie去访问服务器上关于这个身份的完整页面。更复杂的比如微博的登陆这种对请求的数据进行加密了的后面有时间再写出来,与大家分享

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python
, 爬虫
, 模拟登陆
, 模拟登陆知乎
知乎
python 爬虫 模拟登陆、python模拟登陆知乎、python3模拟登陆知乎、python 爬虫 知乎、python爬虫爬取知乎,以便于您获取更多的相关知识。

时间: 2024-09-01 12:13:34

Python 爬虫模拟登陆知乎_python的相关文章

Python使用Srapy框架爬虫模拟登陆并抓取知乎内容_python

一.Cookie原理HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括: Cookie名字(Name)Cookie的值(Value) Cookie的过期时间(Expires/Max-Age) Cookie作用路径(Path) Cookie所在域名(Domain),使用Cookie进行安全连接(Secure) 前两个参数是Cookie应用的必要条件,另外,还包括Cookie大小(Size,不同浏览器对Cookie个数及大小

Python爬虫爬取知乎小结

最近学习了一点网络爬虫,并实现了使用Python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. Python有很多开源工具包供我们使用,我这里使用了requests.BeautifulSoup4.json等包.requests模块帮助我们实现http请求,bs4模块和json模块帮

零基础写python爬虫之urllib2使用指南_python

前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节. 1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test14来实现一个简单的代理Demo: 复制代码 代码如下: import urllib2  enable_proxy = True  proxy_handler = urllib2.ProxyHandler({"http&

python requests模拟登陆github

1. Cookie 介绍         HTTP 协议是无状态的.因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信.Cookie 就是「其他手段」之一. Cookie 一个典型的应用场景,就是用于记录用户在网站上的登录状态. 用户登录成功后,服务器下发一个(通常是加密了的)Cookie 文件. 客户端(通常是网页浏览器)将收到的 Cookie 文件保存起来. 下次客户端与服务器连接时,将 Cookie 文件发送给服务器,由服务器校验其含义,恢复登录状态(从而避免再次登录)

Python 模拟登录知乎

前言 必备知识点 headers Referer User-Agent 隐藏域 其他 模拟登录 模拟防爬 服务器端 loginphp loginhtml 浏览器测试 正常提交用户名密码的话如下 用户名或者密码填写错误的情况如下 爬虫没有添加隐藏域时 添加了隐藏域的爬虫 知乎模拟登录 更新版知乎模拟登陆 代码部分 验证效果 总结 前言 前天看到一个爬取了知乎50多万评论的帖子, 羡慕的同时也想自己来尝试一下.看看能不能获取一些有价值的信息. 必备知识点 下面简单的来谈谈我对常见的防爬虫的一些技巧的

python爬虫入门基本知识

基础知识 HTTP协议 我们浏览网页的浏览器和手机应用客户端与服务器通信几乎都是基于HTTP协议,而爬虫可以看作是一个另类的客户端,它把自己伪装成浏览器或者手机应用客户端,按照自己的逻辑贪婪的向服务器索取数据,如何向服务器索取数据,所以了解HTTP协议就显得很有必要了. HTTP协议中文名称是超文本传输协议,是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式.请求和响应模式很好理解,客户端发送请求,服务器响应客户端的请求,就像学校食堂打菜一样,你和打菜阿姨说要哪份菜,她才

网络爬虫-关于用python模拟登陆新浪微博返回内容

问题描述 关于用python模拟登陆新浪微博返回内容 第一次提交登陆信息和参数后,按照网上大神们的代码应该是在返回的内容中找到location.replace(....)提取url然后再访问,但是我post表单后得到的似乎不是登陆页面也不是正常登陆的页面 不知道这是一个什么页面...算是登陆上去了吗? 解决方案 基于python的新浪微博模拟登陆2014_新浪微博模拟登陆_python模拟新浪微博登陆---------------------- 解决方案二: 看上去是一个登录后的判断页面,要看你

python实现登陆知乎获得个人收藏并保存为word文件_python

这个程序其实很早之前就完成了,一直没有发出了,趁着最近不是很忙就分享给大家. 使用BeautifulSoup模块和urllib2模块实现,然后保存成word是使用python docx模块的,安装方式网上一搜一大堆,我就不再赘述了. 主要实现的功能是登陆知乎,然后将个人收藏的问题和答案获取到之后保存为word文档,以便没有网络的时候可以查阅.当然,答案中如果有图片的话也是可以获取到的.不过这块还是有点问题的.等以后有时间了在修改修改吧. 还有就是正则,用的简直不要太烂-鄙视下自己- 还有,现在是

爬虫-用python模拟登陆csdn时参数lt要如何获得?

问题描述 用python模拟登陆csdn时参数lt要如何获得? 网上看到代码是用正则表达式,可是我打印出来的网页代码里没有相关的内容,运行 代码用findall返回的也是一个空列表..请问应该在哪里得到lt参数? 解决方案 可能是js运行时动态生成. 解决方案二: 你把你登录时候的lt参数值复制下来,填充到你的程序里面试试.