⑴ python爬虫模拟登录是什么意思
有些网站需要登录后才能爬取所需要的信息,此时可以设计爬虫进行模拟登录,原理是利用浏览器cookie。
一、浏览器访问服务器的过程:
(1)浏览器(客户端)向Web服务器发出一个HTTP请求(Http request);
(2)Web服务器收到请求,发回响应信息(Http Response);
(3)浏览器解析内容呈现给用户。
二、利用Fiddler查看浏览器行为信息:
Http请求消息:
(1)起始行:包括请求方法、请求的资源、HTTP协议的版本号
这里GET请求没有消息主体,因此消息头后的空白行中没有其他数据。
(2)消息头:包含各种属性
(3)消息头结束后的空白行
(4)可选的消息体:包含数据
Http响应消息:
(1)起始行:包括HTTP协议版本,http状态码和状态
(2)消息头:包含各种属性
(3)消息体:包含数据
可以发现,信息里不仅有帐号(email)和密码(password),其实还有_xsrf(具体作用往后看)和remember_me(登录界面的“记住我”)两个值。
那么,在python爬虫中将这些信息同样发送,就可以模拟登录。
在发送的信息里出现了一个项:_xsrf,值为
这个项其实是在访问知乎登录网页https://www.hu.com/#signin时,网页发送过来的信息,在浏览器源码中可见:
所以需要先从登录网址https://www.hu.com/#signin获取这个_xsrf的值,
并连同帐号、密码等信息再POST到真正接收请求的http://www.hu.com/login/email网址。
(2)获取_xsrf的值:
爬取登录网址https://www.hu.com/#signin,从内容中获取_xsrf的值。
正则表达式。
(3)发送请求:
xsrf = 获取的_xsrf的值
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
login = s.post(loginURL, data = data, headers = headers)
loginURL:是真正POST到的网址,不一定等同于登录页面的网址;
(4)爬取登录后的网页:
response = s.get(getURL, cookies = login.cookies, headers = headers)
getURL:要爬取的登陆后的网页;
login.cookies:登陆时获取的cookie信息,存储在login中。
(5)输出内容:
print response.content
五、具体代码:
[python]view plain
#-*-coding:utf-8-*-
#author:Simon
#updatetime:2016年3月17日17:35:35
#功能:爬虫之模拟登录,urllib和requests都用了...
importurllib
importurllib2
importrequests
importre
headers={'User-Agent':'Mozilla/5.0(WindowsNT6.2)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.12Safari/535.11'}
defget_xsrf():
firstURL="http://www.hu.com/#signin"
request=urllib2.Request(firstURL,headers=headers)
response=urllib2.urlopen(request)
content=response.read()
pattern=re.compile(r'name="_xsrf"value="(.*?)"/>',re.S)
_xsrf=re.findall(pattern,content)
return_xsrf[0]
deflogin(par1):
s=requests.session()
afterURL="https://www.hu.com/explore"#想要爬取的登录后的页面
loginURL="http://www.hu.com/login/email"#POST发送到的网址
login=s.post(loginURL,data=par1,headers=headers)#发送登录信息,返回响应信息(包含cookie)
response=s.get(afterURL,cookies=login.cookies,headers=headers)#获得登陆后的响应信息,使用之前的cookie
returnresponse.content
xsrf=get_xsrf()
print"_xsrf的值是:"+xsrf
data={"email":"xxx","password":"xxx","_xsrf":xsrf}
printlogin(data)
六、补充:
用知乎网做完试验,发现这里好像并不需要发送_xsrf这个值。
不过有的网站在登陆时确实需要发送类似这样的一个值,可以用上述方法。
⑵ python获取cookie后怎么模拟登陆网站
运行平台:Windows
Python版本:Python3.x
IDE:Sublime text3
一、为什么要使用Cookie
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。
使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。
三、总结
获取成功!如果看过之前的笔记内容,我想这些代码应该很好理解吧。