python模拟登录网页登录
⑴ python获取cookie后怎么模拟登陆网站
运行平台:Windows
Python版本:Python3.x
IDE:Sublime text3
一、为什么要使用Cookie
Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。
使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。
三、总结
获取成功!如果看过之前的笔记内容,我想这些代码应该很好理解吧。
⑵ 用python写一个程序模拟登陆,不知怎么写,请大神指点
importhttplib2
response,content=httplib2.Http().request("guji.artx.cn","GET"header={"cookie":"bdshare_...","User-Agent":"Mozilla/5.0(Windows..."}
请求头都以dict形式写在header里就行了。
返回值中,response里主要是状态码,等信息,注意里面的set-cookie字段。
所以除了js无法实现,你完全可以100%模拟浏览器的行为,cookie、ua、referer都可以带上。
⑶ 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实现网页自动登录
这个你要用到BP,抓取数据包,通过分析数据包提交的表单,每次调用脚本的时候将表单进行提交,但一般这种可行比较低,看网页的安全性做的如何,如果有验证码和token校验的话你就不用试了。
⑸ python 使用requests模块, 如何模拟进行登录并执行之后的操作
以下实例是一个完整的代码,实现了从博客获取内容发布至网络,分别实践抓取博客内容、模拟登录、表单提交这几步;
#注意,以下程序是一个完全程序,如果只需要实现模拟登录,提交表单,删除抓取部分即可,相关的代码已经清楚标注,可以根据自己实际情况修改。
代码如下:
# -*- coding: utf-8 -*-
import re
import urllib
import urllib2
import cookielib
#第一步,获取博客标题和正文 ,“IP”可以改为实际地址;
url = "IP"
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
content = re.findall('(?<=blogstory">).*(?=<p class="right artical)', html, re.S)
content = re.findall('<script.*>.*</script>(.*)', content[0], re.S)
title = re.findall('(?<=<title>)(.*)-.* - CSDN.*(?=</title>)', html, re.S)
#根据文章获取内容新建表单值
blog = {'spBlogTitle': title[0].decode('utf-8').encode('gbk'), #文章标题
'spBlogText': content[0].decode('utf-8').encode('gbk'),#文章内容
'ct': "1",
'cm': "1"}
del content
del title
#第二步,模拟登录网络;
cj = cookielib.CookieJar()
#登陆网络的用户名和密码
post_data = urllib.urlencode({'username': '[username]', 'password': '[password]', 'pwd': '1'})
#登录地址路径
path = 'https://passport..com/?login'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Opera/9.23')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)
#获取网络登陆认证令牌
bd = urllib2.urlopen(urllib2.Request('http://hi..com/[username]/creat/blog')).read()
bd = re.findall('(?<=bdstoken\" value=\").*(?=ct)', bd, re.S)
blog['bdstoken'] = bd[0][:32]
#设置分类名
blog['spBlogCatName'] = 'php'
#第四步,比较表单,提交表单;req2 = urllib2.Request('http://hi..com/[username]/commit', urllib.urlencode(blog))
#最后,查看表单提交后返回内容,检验;
print urllib2.urlopen(req2).read()
#注意:将[username]/[password]替换为自己真实用户名和密码