python

《开发哲学》

  1. Beautiful is better than ugly.(美丽优于丑陋)
  2. Explicit is better than implicit.(直白优于含蓄)
  3. Simple is better than complex.(简单优于复杂)
  4. Complex is better than complicated.(复杂优于繁琐)
  5. Readability counts.(可读性很重要)

一、安装Requests

命令行窗口cmd

pip install requests

二、requests库的7个主要方法

方法
说明
requests.requests()
构造一个请求,支撑一下个方法的基础方法
requests.get()
获取HTML网页的主要方法,对应与HTTP的GRT
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

1、requests的get()方法

HTTP的常用请求是GET和POST,Requests对此区分两种不同的请求方式。GET请求有两种形式,分别是不带参数和带参数,以百度为例:

#不带参数

https://www.baidu.com/

#带参数wd

https://www.baidu.com/s?wd=python

判断URL是否带有参数,可以对符号“?”判断。一般网址末端(域名)带有“?”就说明URL是带有参数的,反之则不带有参数。GET参数说明如下:

  1. wd是参数名,参数名由网站(服务器)规定。
  2. python是参数值,可由用户自行设置。
  3. 如果一个URL有多个参数,参数之间用“&”连接。

Requests实现GET请求,对于带参数的URL有两种请求方式:

import requests
#第一种方式
r=requests.get('https://www.baidu.com/s?wd=python')
#第二种方式 url='https://www.baidu.com/s' params={'wd':'python'} #左边params在GET请求中表示设置参数 r=requests.get(url,params=params) #输出生成的URL print(url)

get ()方法的返回值是一个Response对象,Response作为服务器对get()响应的结果,具有自己的属性和方法。

Response对象的主要属性如下:
 
属性 说明
status_code HTTP请求的返回状态码,200表示链接成功,404表示失败
text HTTP响应内容的字符串形式,即URL对应页面内容
encoding  HTTP响应的编码方式
content HTTP响应内容的二进制形式
headers 返回一个字典,内容是服务器的响应头
url 返回请求的URL
apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
encoding和apparent_encoding的区别
encoding:如果header中不存在charset,则认为编码为ISO-8859-1
apparent_encoding根据网页内容分析出的编码方式
apparen_encoding更为准确

2、requests的post()方法

Post请求是我们常说的提交表单,表单的数据内容就是POST的请求参数。Requests实现POST请求需设置请求参数data,数据格式可以是字典,元组,列表和JSON格式,不同的数据格式有不同的优势。代码如下:

# 字典类型
data = {
    'key1': 'value1',
    'key2': 'value2'
}

# 元组组成列表
({'key1','value1','key2','value2'})

# JSON
import json
data = {'key1': 'value1', 'key2': 'value2'}
# 将字典转换JSON
data = json.dumps(data)
# 发送POST请求
r = requests.post('https://www.baidu.com/', data=data)
print(r.text)

可以看出,左边的data是POST方法的参数,右边的data是发送请求到网站(服务器)的数据,值得注意的是,Requests的GET和POST方法的请求参数分别是params和data,别混淆两者的使用要求。

当向网站(服务器)发送请求时,网站会返回相应的响应(response)对象,包含服务器响应的信息。Requests提供以下方法获取响应内容:

  • r.status_code 响应状态码
  • r.raw 原始响应体,使用r.raw.read()读取
  • r.content 字节式的响应体,需要进行解码。
  • r.text 字符串式的响应体,会自动根据响应头部的字符编码进行解码。
  • r.headers 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写, 若键不存在,则返回None。
  • r.json() Requests中内置的JSON解码器。
  • r.raise_for_status() 请求失败(非200响应),抛出异常。
  • r.url 获取请求链接。
  • r.cookies 获取请求后的cookies。
  • r.eccoding 获取编码格式。

二、理解requests库的异常

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

三、爬取网页的通用代码框架

import requests
 
def getHTMLText(url):
       try:
             r = requests.get(url,timeout=30)
             r = raise_for_status()  #如果状态不是200,引发HTTPError异常
             r.encoding = r.apparent_encoding
             return r.text
       except:
             return '产生异常'
url = "http://www.baidu.com"
print(getHTMLText(url))
原文地址:https://www.cnblogs.com/1328497946TS/p/11016505.html