requests模块

模块安装

pip install requests

requests之request请求

request


常用于Django项目中

print(request.path)  #获取request.path当前请求路径
print(request.method) #获取当前请求方式(get,post...)
print(request.GET) #获取所有get请求携带过来的数据
print(request.POST) #获取所有post请求携带过来的数据
print(request.body) #获取所有post请求携带过来的数据的原始格式
print(request.META)  #请求头信息,将来用到哪个咱们再说哪个
print(request.get_full_path())   #获取请求页面的全部路径 #/customers/?page=5
print(request.is_ajax())   #判断是不是ajax发送的请求,True和False

请求方式

常用的就是requests.get()和requests.post()
看源码可知,requests.get及requests.post等方法都还是调用了request方法

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

请求URL

在数据采集前,确定页面的加载方式(是静态加载还是动态加载),确定需要获取资源的URL

请求头

如何向添加HTTP头部,只是简单的传递一个dict给headers参数就可以了

from fake_useragent import UserAgent
headers = {"User-Agent": UserAgent().random,"data_name":"LCH"}
response=requests.get('http://www.baidu.com',headers=headers)

​ 有些网站对了拒绝通过代码实现的请求,会在接受请求时,对发送请求的载体进行校验,请求头中的‘User-Agent’参数就是请求载体的唯一标识,因此一般需要定制请求头加入载体标识,这也是一种反 反爬策略:UA伪造

方式一:

  • 唯一指定请求载体身份
import requests
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
response=requests.get('http://www.baidu.com',headers=headers)
print(response.encoding)	#百度编码格式为ISO-8859-1
response.encoding='utf-8'
print(response.text)

唯一指定请求载体

方式二:

  • 通过fake-useragent随机生成
import requests
from fake_useragent import UserAgent     #fake-useragent	随机生成请求载体
headers={'User-Agent':UserAgent().random}  	#随机获取一个请求载体
response=requests.get('http://www.baidu.com',headers=headers)
print(response.encoding)	#百度编码格式为ISO-8859-1
response.encoding='utf-8'
print(response.text)

请求参数

requests.request()

requests.request(method,url,kwargs)

  • method 请求方式,对应get/put/post等方法

  • url 获取页面的url链接

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

    • 参数 作用
      params 字典或字节系列,作为参数增加到url中
      data 字典、字节序列或者文件对象,作为Request对象
      json JSON格式的数据,作为Request的内容
      headers 字典:HTTP定制头
      cookies 字典或CookieJar,Request中的auth;元祖支持HTTP认证功能
      files 字典类型,传输文件
      timeout 设定超时时间,秒为单位
      proxies 字典类型,设定代理访问服务器,可以增加登录认证
      allow_redirects TrueFalse,默认为True,重定向开关
      stream TrueFalse,默认为True,获取内容立即下载开关
      verify TrueFalse,默认为True,认证SSL证书开关
      cert 本地SSL证书
      auth 元祖,支持HTTP认证功能
import requests
requests.get('https://api.github.com/events')
requests.post('http://httpbin.org/post', data = {'key':'value'})
requests.put('http://httpbin.org/put', data = {'key':'value'})
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

get请求参数

​ get请求通过URL的查询字符串(querystring)传递某种数据。如果你是手工构建URL,那么数据会以键值对的形式置于URL中,跟在一个问号的后面。例如, https://movie.douban.com/typerank?type_name=动作&type=5&interval_id=100:90&action=&qq-pf-to=pcqq.c2c(豆瓣动作片评分)。 Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。

import requests
from fake_useragent import UserAgent
headers={'User-Agent':UserAgent().random}
START=0
END=2000		#如果循环爬取,起始位置数据计数会有大量重复,因此设置起始值爬取
f=open('豆瓣动作片评分.txt','w',encoding='utf-8')
url=f'https://movie.douban.com/j/chart/top_list'
params={
    'type':'5',
    'interval_id':'100:90',
    'action':'',
    'start':START,
    'limit':END,
}
response = requests.get(url=url, params=params, headers=headers)   get请求参数params
data=response.json()
for movie in data:
    f.write(f'{movie["rank"]}	{movie["title"]}	{movie["score"]}
')
f.close()

post请求参数

​ 你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式。

# http://www.kfc.com.cn/kfccda/storelist/index.aspx   #肯德基城市位置查询
import requests
from fake_useragent import UserAgent
headers={'UserAgent':UserAgent().random}  #随机生成UA
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city=input('请输入查询城市>>>')
data={
    'cname':'',
    'pid':'',
    'keyword':city,
    'pageIndex':'1',
    'pageSize':'100',
}
response=requests.post(url,data=data,headers=headers)   #post请求参数data
for i in response.json()['Table1']:
    print(i['addressDetail'])

timeout参数

​ requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应。

# http://www.kfc.com.cn/kfccda/storelist/index.aspx   #肯德基城市位置查询
import requests
from fake_useragent import UserAgent
headers={'UserAgent':UserAgent().random}  #随机生成UA
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city=input('请输入查询城市>>>')
data={
    'cname':'',
    'pid':'',
    'keyword':city,
    'pageIndex':'1',
    'pageSize':'100',
}
response=requests.post(url,data=data,headers=headers,timeout=0.1)   #post请求参数data
for i in response.json()['Table1']:
    print(i['addressDetail'])

注意
timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

requests之response响应

​ 任何时候进行了类似 requests.get() 的调用,都在做两件主要的事情。其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。

import requests
response = requests.get('http://www.baidu.com')
print(response.status_code)  # 打印状态码
print(response.url)          # 打印请求url
print(response.headers)      # 打印头信息
print(response.cookies)      # 打印cookie信息
#response.encoding='utf-8'/'gbk'#解决编码问题,或者对需要提取的内容进行部分编解码操作(数据解析会讲)
print(response.text)  #以文本形式打印网页源码---文本内容
print(response.content) #以字节流形式打印-----图片/音频/视频
print(response.json()) #以json形式打印----数据接口API
print(response.encoding) #输出页面内容编码格式(如ISO-8859-1)可以指定编码确保输出不乱码

原文地址:https://www.cnblogs.com/Nayears/p/12166719.html