十五天学会爬虫:第二天

学习目标

  • 知道 requests发送POST请求的方法
  • 知道 requests模块使用代理的方法
  • 能够说明 requests处理cookie的三种方法
  • 能够说明 requests解决https证书错误的问题
  • 能够说明 requests中超时参数的使用
  • 能够说明 retrying模块的使用

requests发送POST请求的方法

那些地方我们会用到POST请求:

  • 登录注册(POST比GET更安全)
  • 需要传输大文本内容的时候(POST请求对数据长度没有要求)

用法:

response = requests.post(url, data = data)  # data为POST请求发送的数据

data的形式:字典

requests模块使用代理的方法

为什么要使用代理

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

理解使用代理的过程
在这里插入图片描述

理解正向代理和反向代理的区别

被代理的对象不同,反向代理的对象是服务器,正向代理的对象是浏览器

代理的使用

用法:

requests.get(url, proxies = proxies)

代理(proxies)类型:字典

proxies = {
    "http" : "http://12.34.56.78:9527",
    "https" : "https://12.34.56.78:9527"
}

代理IP的分类

  • 透明代理
  • 匿名代理
  • 高匿代理(推荐使用)

requests处理cookie的三种方法

  1. cookie以关键字参数使用

    # cookies的形式:字典
    cookies = {"cookies的name":"cookies的value"}
    # 使用方法
    requests.get(url, headers = headers, cookies = cookies)
    
  2. 在headers中加入cookie

    # 把cookie加入headers
    headers = {
        "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36""Cookie" : "Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74"
    }
    # 使用方法
    requests.get(url, headers = headers)
    
  3. 使用requests.session类

    session是会话保持

    使用方法

    session = requests.session()
    response = session.get(url,headers)
    

requests解决https证书错误的问题

在这里插入图片描述

(12306网站已经更新了SSL证书)

解决办法

import requests

url = "https://www.12306.cn/mormhweb"
responser = requests.get(url, verify=False)

超时参数的使用

在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错

使用方法:

response = requests.get(url, timeout = 3)

retrying模块的使用

上述方法能够加快我们整体的请求速度,但是在正常的网页浏览过成功,如果发生速度很慢的情况,我们会做的选择是刷新页面,那么在代码中,我们是否也可以刷新请求呢?

  • retry中可以传入参数stop_max_attempt_number,让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行

代码参考

#parse.py
import requests
from retrying import retry

headers = { ... }

@retry(stop_max_attemp_number=3) # 最大重试3次,3次全部报错,才会报错
def _parse_url(url):
    response = requests.get(url, headers=headers, timeout=3) # 超时的时候回报错并重试
	assert response.status_code == 200  # 状态码不是200,也会报错并充实
    return response

def parse_url(url):
    try: # 进行异常捕获
        response = _parse_url(url)
    except Exception as e:
        print(e)
        response = None
    return response
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值