Python requests库

Requests库

Requests库:http://www.python-requests.org

安装requests库

1580809190000

requests库的7个主要方法

方法说明
requests.request() 构造一个请求,支撑以下各方法的基础
requests.get() 获取HTML网页的主要方法,对应的HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应HTTP的HEAD
requests.post() 向HTML网页提交POST请求方法,对应HTTP的POST
requests.put() 向HTML网页提交PUT请求方法,对应HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应HTTP的DELETE

Requests库的方法解析

1. requests.request(method, url, **kwargs)

method:请求方式,对应get/put/post等7种

  • r = requests.request(‘GET’,url,**kwargs)
  • r = requests.request(‘HEAD’,url,**kwargs)
  • r = requests.request(‘POST’,url,**kwargs)
  • r = requests.request(‘PUT’,url,**kwargs)
  • r = requests.request(‘PATCH’,url,**kwargs)
  • r = requests.request(‘delete’,url,**kwargs)
  • r = requests.request(‘OPTIONS’,url,**kwargs)

url:拟获取页面的url链接

**kwargs:控制访问的参数,共13个

  • params:字典或字节序列,作为参数增加到url中

    1580877838128

  • data:字典、字节序列或文件对象,作为Request的内容

  • json:JSON格式的数据,作为Request的内容

  • headers:字典,HTTP定制头

  • cookies:字典或CookieJar,Request中的cookie

  • author:元组,支持HTTP认证功能

  • files:字典类型,传输文件

    fs = {'file':open('data.xls','rb')}
    r = requests.request('POST','http://www.baidu.com',files=fs)
    
  • timeout:设定超时时间,秒为单位

    r = requests.request('GET','http://www.baidu.com',timeout=10)
    
  • proxies:字典类型,设定访问代理服务器,可以增加登录认证(可隐藏用户爬取网页原的ip地址信息)

    pxs = {'http':'http://user:pass@10.10.10.1:1234',
           'http':'http://10.10.10.1:4321'}
    r = requests.request('GET','http://www.baidu.com',proxies=pxs)
    
  • allow_redirects:True/False,默认为True,重定向开关

  • stream:True/False,默认为True,获取内容立即下载开关

  • verify:True/False,默认为True,认证SSL证书开关

  • cert:本地SSL证书路径

 

2.requests.get(url, params=None, **kwargs)

url:拟获取页面的url链接

params:url中的额外参数,字典或者字节流格式,可选

**kwargs:12个控制访问的参数

 

3.requests.head(url, **kwargs)

url:拟获取页面的url链接

**kwargs:13个控制访问的参数

 

4.requests.post(url, data=None, json=None, **kwargs)

url:拟获取页面的url链接

data:字典、字节序列或文件,Request的内容

json:JSON格式的数据,Request的内容

**kwargs:11个控制访问的参数

 

5.requests.put(url, data=None, **kwargs)

url:拟获取页面的url链接

data:字典、字节序列或文件,Request的内容

**kwargs:12个控制访问的参数

 

6.requests.patch(url, data=None, **kwargs)

url:拟获取页面的url链接

data:字典、字节序列或文件,Request的内容

**kwargs:12个控制访问的参数

 

7.requests.delete(url, **kwargs)

url:拟获取页面的url链接

**kwargs:13个控制访问的参数

例子:爬取百度的信息

1580810021461

 

Requests库的异常

异常说明
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 远程连接服务器超时异常
requests.Timeout 请求URL超时,产生的超时异常

理解Requests库的异常

异常方法
r.raise_for_status() 如果不是200,产生异常requests.HTTPError

 

爬取网页的通用代码框架

import requests

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()#如果不是200,产生requests.HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
    
if _name_ == "_main_":
    url = "http://www.baidu.com"
    print(getHTMLText(url))

HTTP协议及Requests库方法

HTTP协议

HTTP,Hypertext Transfer Protocol,超文本传输协议。

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。

HTTP协议采用URL作为定位网络资源的标识。

URL

URL是通过HTTP协议存储资源的Internet路径,一个URL对于一个数据资源。

URL格式 http://host[:port][path]

  • host:合法的Internet主机域名或IP地址
  • port:端口号,缺省端口为80
  • path:请求资源的路径

HTTP协议对资源的操作

方法说明
GET 请求获取URL位置的资源
HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部消息
POST 请求向URL位置的资源后附加新的数据
PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH 请求局部更新URL位置的资源,即改变该处资源你的部分内容
DELETE 请求删除URL位置存储的资源
PATCH和PUT的区别

假设URL位置有一组数据UserInfo,包括UserID、UserName等

需求:用户修改了UserName,其他不变

  • 采取PATCH,仅向URL提交UserName的局部更新请求。
  • 采用PUT,必须将所有20个字段一并提交到URL,未提交的字段被删除。

PATCH的最主要的好处:节省网络带宽

实例:亚马逊商品页面的爬取

import requests
url = 'https://www.amazon.cn/dp/B07TPWBQ3Y?ref_=Oct_DLandingS_D_48449dee_60&smid=A26HDXW89ZT98L'
try:
    kv = {'user-agent':'Mozilla/5.0'}
    r = requests.get(url,headers=kv)#修改头部,改为Mozilla/5.0头部
    r.raise_for_status()			#如果不是200,产生requests.HTTPError异常
    r.encoding = r.apparent_encoding#改为人类可阅读的编码
    print(r.text[1000:2000])		#打印1000~2000行的信息
except:
    print("爬取失败")

实例:百度360搜索关键字提交

百度的关键词接口:

http://www.baidu.com/s?wd=keyword

360的关键词接口:

http://www.so.com/s?q=keyword

import requests
keyword = "Python"
try:
    kv = {'wd':'Python'}
    r = requests.get("http://www.baidu.com/s",params=kv)#params:字典或字节序列,作为参数增加到url中
    print(r.request.url)
    r.raise_for_status()
    print(len(r.text))
except:
    print("爬取失败")
        

实例:网络图片的爬取与存储

网络图片链接格式:

http://www.example.com/picture.jpg

import requests
import os
url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1580895731055&di=8700ba330a284d045c1e9f3df8a622b6&imgtype=0&src=http%3A%2F%2Fpic.rmb.bdstatic.com%2Ff79ba62d4fdf35ceea4af90e31226ce1.jpeg"
root = "H://pics//"			#定义根目录
path = root + url.split('/')[-1]#定义路径,根目录+文件名称(与url最后文件名称相同),split()分隔符
try:
    if not os.path.exists(root):	#os.path.exists()判断文件路径是否存在
        os.mkdir(root)			#如果不存在建立一个根目录,os.mkdir()创建目录
    if not os.path.exists(path):
        r = requests.get(url)	#判断文件是否存在,如果不存在通过requests.get获取
        with open(path, 'wb') as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
     else:
        print("文件已存在")
except:
	print("爬取失败")

实例:IP地址归属地的自动查询

网络提供查询地址的库:

http://www.ip138.com/ip.asp?ip=ipaddress

import requests
url = "http://www.ip138.com/ip.asp?ip="
try:
    r = requests.get(url + '202.204.80.112')
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")

 

posted @ 2021-03-09 16:47  Hp_mzx  阅读(144)  评论(0)    收藏  举报