python 使用requests模块, 如何模拟进行登录并执行之后的操作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 使用requests模块, 如何模拟进行登录并执行之后的操作?相关的知识,希望对你有一定的参考价值。
一个简单的例子, 我要先登录百度知道, 然后进行今天的签到.因为签到必须前必须登录.
分解一下就是两个问题, session 保持和 cookie.
#注意,以下程序是一个完全程序,如果只需要实现模拟登录,提交表单,删除抓取部分即可,相关的代码已经清楚标注,可以根据自己实际情况修改。
代码如下:
# -*- 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.baidu.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.baidu.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.baidu.com/[username]/commit', urllib.urlencode(blog))
#最后,查看表单提交后返回内容,检验;
print urllib2.urlopen(req2).read()
#注意:将[username]/[password]替换为自己真实用户名和密码 参考技术A 只需要实现模拟登录,提交表单,删除抓取部分即可,相关的代码已经清楚标注,可以根据自己实际情况修改。 参考技术B https://github.com/JFY/Python/blob/master/spider.py本回答被提问者采纳
以上是关于python 使用requests模块, 如何模拟进行登录并执行之后的操作?的主要内容,如果未能解决你的问题,请参考以下文章