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模块, 如何模拟进行登录并执行之后的操作?的主要内容,如果未能解决你的问题,请参考以下文章

python网络爬虫之requests模块

Python爬虫:requests模块使用

requests模块

Python爬虫之request模块

python-爬虫之requests模块介绍(登陆github)

爬虫--Python常用模块之requests,urllib和re