requests深入

代理

  • 浏览器 --> 服务器
  • 反向代理:浏览器 --> nginx --> 服务器
  • 正向代理:浏览器 --> 代理 --> 服务器

问题:为什么爬虫需要使用代理?

  • 让服务器以为不是同一个客户端在请求
  • 防止我们的真实地址被泄露,防止被追究

使用代理IP

  • 准备一堆的ip地址,组成IP池,随机选择一个IP来使用
  • 如何随机选择代理IP,让使用次数较少的IP地址有更大的可能性被用到
  • {'ip':ip,'times':0}
  • [{},{}]对这个IP的列表进行排序,按照使用次数进行排序
  • 选择使用次数较少的10个IP,从中随机选择一个
  • 检查IP的可用性
  • 可以使用requests添加超市参数,判断IP地址的质量
  • 在线代理IP质量检测的网站
import requests
# 根据协议类型,选择不同的代理
proxies = {
 "http": "http://12.34.56.79:9527",
 "https": "http://12.34.56.79:9527",
}
response = requests.get("http://www.baidu.com", proxies = proxies)
print response.text
  • 也可以通过本地环境变量 HTTP_PROXY 和 HTTPS_PROXY 来配置代理
    export HTTP_PROXY="http://12.34.56.79:9527"
    export HTTPS_PROXY="https://12.34.56.79:9527"

cookie和session区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

爬虫处理cookie和session

  • 带上cookie、session的好处:
    能够请求到登录之后的页面
  • 带上cookie、session的弊端:
    一套cookie和session往往和一个用户对应请求太快,请求次数太多,容易被服务器识别为爬虫
  • 不需要cookie的时候尽量不去使用cookie,但是为了获取登录之后的页面,我们必须发送带有cookies的请求

处理cookies 、session请求

requests 提供了一个叫做session类,来实现客户端和服务端的会话保持

Cookies

import requests
response = requests.get("http://www.baidu.com/")
# 7\. 返回CookieJar对象:
cookiejar = response.cookies
# 8\. 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print (cookiejar)
print (cookiedict)

session

请求登陆之后的网站的思路

  • 实例化session
  • 先使用session发送请求,登录网站,把cookie保存在session中
  • 再使用session请求登录之后才能访问网站,session能够自动的携带登录成功时保存在其中的cookie,进行请求

实现人人网登录

import requests
# 1.创建session对象,可以保存Cookie值
ssion = requests.session()
# 2.处理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# 3.需要登录的用户名和密码
data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"}  
# 4.发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do", data = data)
# 5.ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/410043129/profile")
# 6.打印响应内容
print (response.text)

Requests小技巧

  • reqeusts.util.dict_from_cookiejar 把cookie对象转化为字典
    requests.get(url,cookies={})
  • 请求 SSL证书验证
    response = requests.get("https://www.12306.cn/mormhweb/ ", verify=False)
  • 设置超时
    response = requests.get(url,timeout=10)
  • 配合状态码判断是否请求成功
    assert response.status_code == 200

异常重试

  • pip install retrying
    from retrying import retry
    @retry(stop_max_attempt_number=3)
    #只使用@retry,则会一直不停运行
    #stop_max_attempt_number最大运行次数
    #stop_max_delay 设置失败重试的最大时间, 单位毫秒,超出时间,则停止重试
    #wait_fixed 设置失败重试的间隔时间
    #wait_random_min, wait_random_max 设置失败重试随机性间隔时间
    #wait_exponential_multiplier-间隔时间倍数增加,wait_exponential_max-最大间隔时间
    #retry_on_exception:指定异常类型,指定的异常类型会重试,不指定的类型,会直接异常退出
    def index():
        print(1/0)
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容