一、requests的概述

requests模块是用于发送网络请求,返回响应数据。底层实现是urllib,而且简单易用,在python2、python3中通用,能够自动帮助我们解压(gzip压缩的等)网页内容。

二、requests的基本使用

1、基本使用:

  • 安装requests模块: pip install requests
  • 导入模块:import reqeusts
  • 发送请求,获取响应:response = requests.get(url)
  • 从响应中获取数据

2、方法:

(1)requests.get(url, params=None, **kwargs),发送一个get请求,返回一个Response对象

  • url:请求的url
  • params:get请求的?后面可选参数字典
    方式一:自己拼接一个带有参数的URL,比如"https://www.sogou.com/web?query={}"
    方式二:在发送请求时,使用params指定,格式requests.get("url", params={})
  • **kwargs:可选参数
    headers:请求头参数字典。
    # 请求头格式
    headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
    }
    requests.get(url, headers=headers)

    proxies:代理参数字典。

    # 代理格式
    proxies = {
    "http": "http://ip:端口号",
    "https": "https://ip:端口号"
    }
    requests.get(url, proxies=proxies) # 使用需要账号和密码的代理
    proxies = {
    "http":"http://username:password@ip:端口号",
    "https": "https://username:password@ip:端口号"
    }
    request.get(url, proxies=proxies)

    cookies:cookies参数字典。
    verify:请求SSL证书验证。
    timeout:设置超时。能够加快整体的请求速度。

(2)requests.post(url, data=None, json=None, **kwargs),发送一个post请求

  • url:
  • data:
  • json:
  • **kwargs:可选参数
    headers:请求头参数字典
    proxies:代理参数字典。
    cookies:cookies参数字典。

(3)requests.util.dict_from_cookiejar(cj):把cookie对象转化为字典

  • cj:cookie对象(response.cookies)

(4)requests.util.quote(url):URL编码

(5)requests.util.unquote(url):URL解密

3、对象:

(1)Response对象,是发送请求后的响应对象

常用属性:

  • Response.text:str类型的响应数据
  • Response.content:二进制类型的响应数据
  • Response.status_code:响应状态码
  • Response.headers:响应头
  • Response.request.headers:请求头
  • Response.json() :获取json类型的响应数据,如果返回的数据不是json类型就不能使用

三、代理

在requests模块中使用代理发送请求的原因是:如果使用一个固定IP不断的发送请求,服务器会认为这样的操作不是人干的,就把你的IP给封了,而且还会根据你的IP快速锁定你。

代理的分类:

1、正向代理:

  • 客户端知道代理的存在,正向代理是为了保护客户端,防止被追踪。
  • 服务端不知道真实的客户端。

2、反向代理:

  • 服务器端知道代理的存在,反向代理是为了保护服务器或负责负载均衡。
  • 客户端不知道代理的存在。

代理IP的分类

1、根据匿名程度:

  • 透明代理:透明代理虽然可以直接隐藏你的IP地址,但是还是可以查到你是谁。
  • 匿名代理:别人只能知道你用了代理,无法知道你是谁。
  • 高匿代理:让别人根本无法发现你是在用代理,所以是最好的选择。

2、根据请求的协议:

  • http代理
  • https代理
  • socket代理

不同分类的代理,在使用的时候需要根据抓取网站的协议来选择。

使用代理IP的注意点:

  • 反反爬:使用代理IP时使用随机的方式进行选择使用,不要每次都使用一个代理IP。
  • 更新代理IP池:购买的代理IP很多时候大部分可能无法使用了,需要通过程序去检验哪些可用,把不能用的删除掉。
    import random
    import requests
    # 1. 准备代理列表
    proxies = [
    {'http': '121.8.98.198:80'},
    {'http': '39.108.234.144:80'},
    {'http': '125.120.201.68:808'},
    {'http': '120.24.216.39:60443'},
    {'http': '121.8.98.198:80'},
    {'http': '121.8.98.198:80'}
    ] # 2. 随机选出一个代理
    for i in range(0, 10):
    proxy = random.choice(proxies)
    print(proxy)
    try:
    response = requests.get("http://www.baidu.com", proxies=proxy, timeout=3)
    print(response.status_code)
    except Exception as ex:
    print("代理有问题: %s" % proxy)

 四、获取服务器端登录后的资源

三种方式:

  • 发送请求的时候,在headers中指定cookie字符串。

    headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
    # "Cookie": cookie_str
    }
  • 发送请求的时候,通过cookies参数指定,是一个字典。
    response = requests.get(url, headers= headers, cookies=cookie_dic)
  • 使用session进行登录,登录后使用session访问登录后资源,这时session会自动携带cookie信息。
  • import requests
    
    # 1. 获取session对象
    session = requests.session() headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
    } # 2. 使用session对象,进行登录,登录后seesion对象会记录用户相关的cookie信息
    login_url = "http://www.renren.com/PLogin.do"
    data = {
    "email":"15565280933",
    "password":"a123456"
    } response = session.post(login_url, data=data, headers=headers)
    print(response.status_code)
    print(response.content.decode())
    # 3. 再使用记录cookie信息对象session访问个人主页
    profile_url = "http://www.renren.com/965194180/profile"
    response = session.get(profile_url)

五、retrying模块的使用

如果访问速度很慢,可以选择刷新页面,在代码中使用retrying模块刷新请求,通过装饰器的方式,让被装饰的函数反复执行。

@retry(stop_max_attempt_number=3),让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,整个函数报错,如果中间有一个成功,程序继续往后执行

  • stop_max_attempt_number:最大重试次数。
import requests
from retrying import retry headers = {} #最大重试3次,3次全部报错,才会报错
@retry(stop_max_attempt_number=3)
def _parse_url(url)
#超时的时候会报错并重试
response = requests.get(url, headers=headers, timeout=3)
#状态码不是200,也会报错并重试
assert response.status_code == 200
return response def parse_url(url)
try: #进行异常捕获
response = _parse_url(url)
except Exception as e:
print(e)
#报错返回None
response = None
return response

爬虫学习(二)requests模块的使用的更多相关文章

  1. python网络爬虫之二requests模块

    requests http请求库 requests是基于python内置的urllib3来编写的,它比urllib更加方便,特别是在添加headers, post请求,以及cookies的设置上,处理 ...

  2. Python爬虫学习1: Requests模块的使用

    Requests函数库是学习Python爬虫必备之一, 能够帮助我们方便地爬取. Requests: 让HTTP服务人类. 本文主要参考了其官方文档. Requests具有完备的中英文文档, 能完全满 ...

  3. 爬虫简介与requests模块

    爬虫简介与requests模块 一 爬虫简介 概述 网络爬虫是一种按照一定规则,通过网页的链接地址来寻找网页的,从网站某一个页面(通常是首页)开始,读取网页的内容,找到网页中的其他链接地址,然后通过这 ...

  4. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...

  5. 爬虫二 requests模块的使用

    一.requests模块的介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:reques ...

  6. 爬虫入门之Requests模块学习(四)

    1 Requests模块解析 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保 ...

  7. 爬虫开发5.requests模块的cookie和代理操作

    代理和cookie操作 一.基于requests模块的cookie操作 引言:有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests ...

  8. 爬虫开发3.requests模块

    requests模块 - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能 ...

  9. 爬虫中之Requests 模块的进阶

    requests进阶内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个 ...

  10. 爬虫简介和requests模块

    目录 爬虫介绍 requests模块 requests模块 1.requests模块的基本使用 2.get 请求携带参数,调用params参数,其本质上还是调用urlencode 3.携带header ...

随机推荐

  1. 解决Linux所有命令不能使用的问题

    解决Linux所有命令不能使用的问题 出现这个问题说明你的 /etc/profile 配置出现了问题,一般是因为path配置出现了问题.排除添加内容中的错误,然后重启一个新窗口执行执行 source ...

  2. ssh 免密码登陆设置不成功

    记一次centos6设置免密码登陆设置不成功的解决.自己挖的坑自己填. ssh 免密码登陆设置( 正常情况下是这样的,设置成功后登陆主机是不需要密码的) [root@master .ssh]# ssh ...

  3. 实验4 汇编应用编程和c语言程序反汇编分析

    1. 实验任务1 教材「实验9 根据材料编程」(P187-189)编程:在屏幕中间分别显示绿色.绿底红色.白底蓝色的字符串'welcome to masm!'. 解题思路:根据学习的知识,我知道该页在 ...

  4. 纯Python绘制艺术感满满的山脊地图,创意满分

    1 简介 下面的这幅图是英国摇滚乐队 Joy Division 在1979年发行的其第一张录音室专辑 Unknown Pleasures 的封面,由艺术家 Peter Saville 基于射电脉冲星信 ...

  5. 使用Attribute限制Action只接受Ajax请求

    原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...

  6. Excel 快速跳到表格最后一行/第一行

    快速跳到表格的最后一行 首先鼠标选中一个带有数据的单元格,点击shift键,把鼠标放到该单元格底部的边缘地带,出现带四个方向的箭头为止,再连续点击鼠标左键两次,直接跳到表格的最后一行 快速跳到表格的最 ...

  7. 【命令】ln命令

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件或目录在另外一个位置建立一个同步的链接,默认是链接是硬链接,常用参数是 "-s"  . 对于ln命令,这里 ...

  8. FaaS,未来的后端服务开发之道

    说 FaaS 先要说说 PaaS 平台即服务(Platform as a Service)是一种云计算服务,提供运算平台与解决方案堆栈即服务.在云计算的典型层级中,平台即服务层介于软件即服务与基础设施 ...

  9. Java动态代理分析

    Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地制定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分配到委托对象上反射执行,配置执行过程中,开发 ...

  10. 深入浅出!阿里P7架构师带你分析ArrayList集合源码,建议是先收藏再看!

    ArrayList简介 ArrayList 是 Java 集合框架中比较常用的数据结构了.ArrayList是可以动态增长和缩减的索引序列,内部封装了一个动态再分配的Object[]数组 这里我们可以 ...