
有些网站需要登录后才能爬取所需要的信息,此时可以设计爬虫进行模拟登录,原理是利用浏览器cookie。
一、浏览器访问服务器的过程:
(1)浏览器(客户端)向Web服务器发出一个>
二、利用Fiddler查看浏览器行为信息:
>
(1)起始行:包括请求方法、请求的资源、>
这里GET请求没有消息主体,因此消息头后的空白行中没有其他数据。
(2)消息头:包含各种属性
(3)消息头结束后的空白行
(4)可选的消息体:包含数据
>
(1)起始行:包括>
(2)消息头:包含各种属性
(3)消息体:包含数据
从上面可见,cookie在>
三、什么是cookie:
当用户通过浏览器首次访问一个域名时,访问的Web服务器会给客户端发送数据,以保持Web服务器与客户端之间的状态,这些数据就是Cookie。
它是站点创建的,为了辨别用户身份而储存在用户本地终端上的数据,其中的信息一般都是经过加密的,存在缓存或硬盘中,在硬盘中是一些小文本文件。
当访问该网站时,就会读取对应网站的Cookie信息。
作用:记录不同用户的访问状态。
四、 *** 作过程:
在知乎登录界面输入用户名和密码,然后登录。
利用Fiddler来查看这期间浏览器和知乎服务器之间的信息交互。
(1)浏览器给服务器发送了一个POST,携带帐号和密码等信息;
从起始行可见,POST是发送给>
可以发现,信息里不仅有帐号(email)和密码(password),其实还有_xsrf(具体作用往后看)和remember_me(登录界面的“记住我”)两个值。
那么,在python爬虫中将这些信息同样发送,就可以模拟登录。
在发送的信息里出现了一个项:_xsrf,值为2fc4ab0f0f144c2e478c436fe3160443
这个项其实是在访问知乎登录网页>
所以需要先从登录网址>
并连同帐号、密码等信息再POST到真正接收请求的>
(2)获取_xsrf的值:
爬取登录网址>
(3)发送请求:
xsrf = 获取的_xsrf的值
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
login = spost(loginURL, data = data, headers = headers)
loginURL:是真正POST到的网址,不一定等同于登录页面的网址;
(4)爬取登录后的网页:
response = sget(getURL, cookies = logincookies, headers = headers)
getURL:要爬取的登陆后的网页;
logincookies:登陆时获取的cookie信息,存储在login中。
(5)输出内容:
print responsecontent
五、具体代码:
[python] view plain copy
# -- coding:utf-8 --
# author:Simon
# updatetime:2016年3月17日 17:35:35
# 功能:爬虫之模拟登录,urllib和requests都用了
import urllib
import urllib2
import requests
import re
headers = {'User-Agent':'Mozilla/50 (Windows NT 62) AppleWebKit/53511 (KHTML, like Gecko) Chrome/17096312 Safari/53511'}
def get_xsrf():
firstURL = ">
request = urllib2Request(firstURL,headers = headers)
response = urllib2urlopen(request)
content = responseread()
pattern = recompile(r'name="_xsrf" value="()"/>',reS)
_xsrf = refindall(pattern,content)
return _xsrf[0]
def login(par1):
s = requestssession()
afterURL = ">
loginURL = ">
login = spost(loginURL, data = par1, headers = headers) # 发送登录信息,返回响应信息(包含cookie)
response = sget(afterURL, cookies = logincookies, headers = headers) # 获得登陆后的响应信息,使用之前的cookie
return responsecontent
xsrf = get_xsrf()
print "_xsrf的值是:" + xsrf
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
print login(data)
六、补充:
用知乎网做完试验,发现这里好像并不需要发送_xsrf这个值。
不过有的网站在登陆时确实需要发送类似这样的一个值,可以用上述方法。
在采集网站的过程中,部分数据价值较高的网站,会限制访客的访问行为。这种时候建议通过登录的方式,获取目标网站的cookie,然后再使用cookie配合代理IP进行数据采集分析。
1 使用表单登陆
这种情况属于post请求,即先向服务器发送表单数据,服务器再将返回的cookie存入本地。
2 使用cookie登陆
使用cookie登陆,服务器会认为你是一个已登陆的用户,所以就会返回给你一个已登陆的内容。因此,需要验证码的情况可以使用带验证码登陆的cookie解决。
此外目前市场上的一些采集软件也是支持登录和验证码。
关于知乎验证码登陆的问题,用到了Python上一个重要的处理库PIL,如果不行,就把存到本地,手动输入。
通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。
这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。
用chrome (或者火狐 >
Cookie是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。比如说有些网站需要登录后才能访问某个页面,在登录之前你想抓取某个页面内容是不允许的。那么可以利用Urllib库保存登录的Cookie,然后再抓取其他页面,这样就达到了你的目的。爬虫过程中只用python来保存cookie信息模拟登录是不行的,爬虫限制有很多,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同 *** 作等等。
public void saveCookie(>}
这是一个保存cookie的方法 但我实在没看懂你想做什么功能 能详细说一下吗
如果你在登录阶段没有问题,可以登录成功,那么可以这样获取Cookie:cookies=>
以上就是关于是爬取内网数据(python vba都行)全部的内容,包括:是爬取内网数据(python vba都行)、python 新浪微博爬虫,求助、python爬虫模拟登录是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)