一.cookie模拟登录的三种方式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author tom import requests
post_url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20192012211'
post_data={"email":"302624476@qq.com","password":"xxx"}
headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"}
session=requests.session()
#使用session发送post请求,cookie保存在其中
session.post(url=post_url,data=post_data,headers=headers) #在session请求登录之后才能获取的网址
r=session.get("http://www.renren.com/323264874/profile",headers=headers) with open('renren.html','w',encoding='utf-8') as f:
f.write(r.content.decode()) # request模拟登陆的三种方式:
#方式一:
# 先实例化一个session对象,用session先发起一个post请求,session就保存了cookie,再用session发起登录后的请求 #方式二
#浏览器挡登陆后拿到cookie
# 在headers中添加cookie的键值对 # 方式三
#在请求方法中添加cookies参数,接收字典形式的cookies
# 字典形式的cookie中的键是cookie中name对应的值,值是cookie中value对应的之
#和方式二有点类似,就是拿到cookie,改造成字典,然后在请求时候设置cookies参数

  关于方式三的扩展:

  1. requests.utils.dict_from_cookiejar()
def test_url(ip,is_http,redis=None):
pro = {TYPES[is_http]:ip}
#if redis == None:
# redis = redis.StrictRedis(REDIS_SERVER,REDIS_PORT,DB_FOR_IP)
time = 0
flag= False
try:
#print "test url:",i,ip,pro
r = None
cookie_old = None
if STORE_COOKIE and redis != None:
cookie_old = redis.get(ip)
#print "old cookie:",cookie
if cookie_old != None and cookie_old != "None" and cookie_old != "{}":
#print "use cookie"
log.debug("PID:%d IP:%s use old cookies:%s " % (os.getpid(),ip,cookie_old))
cookies = cookiejar_from_dict(json.loads(cookie_old))
r = requests.get(TEST_URL,proxies=pro,cookies=cookies,timeout=SOKCET_TIMEOUT)
else:
if USE_DEFAULT_COOKIE:
rand_cookies = {"bid":random_str()}
log.debug("PID:%d IP:%s use random cookies:%s " % (os.getpid(),ip,str(rand_cookies)))
cookie = cookiejar_from_dict(rand_cookies)
r = requests.get(TEST_URL,proxies=pro,cookies=cookie,timeout=SOKCET_TIMEOUT)
else:
r = requests.get(TEST_URL,proxies=pro,timeout=SOKCET_TIMEOUT)
else:
if USE_DEFAULT_COOKIE:
cookie = cookiejar_from_dict({"bid":random_str()})
r = requests.get(TEST_URL,proxies=pro,cookies=cookie,timeout=SOKCET_TIMEOUT)
else:
r = requests.get(TEST_URL,proxies=pro,timeout=SOKCET_TIMEOUT)
time += r.elapsed.microseconds/1000
log.debug("PID:%d Test IP:%s result:%d time:%d type:%s" % (os.getpid(),ip,r.status_code,time,TYPES[is_http]))
if r.ok:
flag = True
if STORE_COOKIE and redis != None:
#print "new cookies:",r.cookies
if r.cookies != None :
cookie = json.dumps(dict_from_cookiejar(r.cookies))
if cookie and cookie != "{}" and cookie_old != cookie:
log.debug("PID:%d IP:%s new cookies:%s old cookies:%s" % (os.getpid(),ip,cookie,cookie_old))
redis.set(ip,cookie)
except Exception as e:
log.debug("PID:%d error:%s" % (os.getpid(),e.message))
return flag,time

  可参考:http://codingdict.com/sources/py/requests.utils/18814.html

二.requests编码问题

  1.response.text

  • 类型:str
  • 解码方式:根据HTTP头部对应的编码做出有根据的推测,推测文本的编码内容
  • 如何修改编码方式:response.encoding="指定的编码方式"

  2.response.content

  • 类型:bytes
  • 解码类型:没有指定
  • 如何修改编码方式:response.content.deocode("编码方式")

注意:更建议使用第二种,原汁原味,过早的预处理不是好结果

三.url的编码解码

  1.requests.utils.unquote(url)

  2.requests.utils.quote(url)

requests模块的一些总结的更多相关文章

  1. 爬虫requests模块 1

    让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...

  2. requests 模块

    发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取Gith ...

  3. requests模块--python发送http请求

    requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...

  4. Python requests模块学习笔记

    目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档   1.Requests模块说明 Requests 是使用 Apache2 Li ...

  5. Python高手之路【八】python基础之requests模块

    1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  6. Python requests模块

    import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': [ ...

  7. 基于python第三方requests 模块的HTTP请求类

    使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...

  8. 使用requests模块爬虫

    虽然干技术多年了,但从没有写过博客,想来甚是惭愧,本篇作为我博客的第一篇,也是测试篇.不为写的好,只为博诸君一眸而已. 使用python爬虫,有几个比较常用的,获取html_content的模块url ...

  9. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  10. python爬虫之requests模块介绍

    介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...

随机推荐

  1. 数据库 MySQL 之 基本概念

    数据库 MySQL 之 基本概念 浏览目录 概述 数据库的特点 数据库的分类 选择MySQL的理由 & MariaDB 介绍 下载及安装 SQL介绍 一.概述 1.数据(data) 存储在表中 ...

  2. excel中COUNTIF的使用

    =(COUNTIF(D9:AH9,"●")+COUNTIF(D7:AH7,"●"))*0.5

  3. html5 存储方式

    localstorage(永久保存)&&sessionstorage(重新打开浏览器会消失) sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在 ...

  4. Deep Residual Learning for Image Recognition

    Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun           Microsoft Research {kahe, v-xiangz, v-sh ...

  5. 编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符

    建议9: 习惯重载运算符 在开发过程中,应该习惯于使用微软提供给我们的语法特性.我想每个人都喜欢看到这样的语法特性: ; ; int total = x + y; 而不是用下面的语法来完成一样的事情: ...

  6. .netcore部署到IIS上出现HTTP Error 502.5 - Process Failure问题解决

    首先网上是有很多解决方案,但是对我这个错误完全没用 如果你们没有环境首先得预装环境如下 1.首先在bing.com下搜索asp.net core download, 然后打开搜索到的信息.NET Do ...

  7. c#后台弹出框

    ClientScript.RegisterStartupScript(this.GetType(), "message", "<script>alert('提 ...

  8. asp.net winform 界面传值

    第一种 //form1 //静态传值 public static string Chuanzhi; string Chuanzhi = textbox.text; //form2 string Chu ...

  9. C#Task学习

    简介: Task 对象是一种的中心思想基于任务的异步模式首次引入.NET Framework 4 中. 因为由执行工作Task对象通常以异步方式执行线程池线程上而不是以同步方式在主应用程序线程中,可以 ...

  10. php统计目录大小

    function dirSize($directroy) { $dir_size=0; $dir_handle = @opendir($directroy); if($dir_handle) { wh ...