Python爬虫之request模块

1. 请求方式

# 介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) 
# 注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求

1. Request = requests.rquest(method, url, **kwargs)  # 构造一个请求
	# ethod(6个)  head/get/post/put/patch/delete
	
2. requests.head(url, **kwargs)

3. requests.get(url, params=None, **kwargs)
	# params  # 字典或者字节序列
	
4. requests.post(url, data=None , json=None, **kwargs)
	# data  # 字典字节序列或者文件,Rquest的内容
	# json  # json格式的数据,Request的内容
	
5. requests.put(url, data=None, **kwargs)  #data # 字典字节序列或者文件,Rquest的内容

6. requests.patch(url, data=None, **kwargs)  #data # 字典字节序列或者文件,Rquest的内容  

7. requests.delete(url, *kwargs)

8. requests.options(url)  
	# Preflighted Requests是CORS中一种透明服务器验证机制。
	# 预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。
	# 跨域资源共享(CORS) 是一种机制
"""
1. params # 字典或者字节序列

2. data # 字典字节序列或者文件,Rquest的内容

3. json # json格式的数据,Request的内容 

4. headers # 字典,HTTP定制头

5. cookies # 字典或者cookiejar,Request中的cookie

6. auth # 元组,支持HTTP认证功能 

7. files # 字典类型,传输文件
#fs = {"files":open("文件名","rb")}
#r = requests.request("POST", url, files=fs)

8. timeout # 设置超时时间,单位为秒 

9. proxies #字典类型,设定代理服务器
#pxs = {"http":"ip地址1","https":"ip地址2"}

10. allow_redirect重定向开关

11. stream立即下载开关

12. verify认证ssl证书开关  # 访问危险网站

13. cert本地ssl证书路径
"""

2. get请求

import requests

"""
GET请求
HTTP默认的请求方法就是GET
     * 没有请求体
     * 数据必须在1K之内!
     * GET请求数据会暴露在浏览器的地址栏中

GET请求常用的操作:
       1. 在浏览器的地址栏中直接给出URL,那么就一定是GET请求
       2. 点击页面上的超链接也一定是GET请求
       3. 提交表单时,表单默认使用GET请求,但可以设置为POST
"""

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)  # params可变个数的

3. post请求

"""
POST请求
(1). 数据不会出现在地址栏中
(2). 数据的大小没有上限
(3). 有请求体
(4). 请求体中如果存在中文,会使用URL编码!

注意:
   1、对于登录来说,应该输错用户名或密码然后分析抓包流程,用脑子想一想,输对了浏览器就跳转了,还分析个毛线,累死你也找不到包
  2、要做登录的时候一定记得要把cookie先清除;
  3、requests.session():中间的cookie都不用自己分析了,有用的没用的都给放进来了、
  4、response.cookie.get_dict()    #获取cookie
"""  

4. response属性

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"}

url = "http://www.baidu.com"

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

print(response)  # <Response [200]>

ret = response.request  # <PreparedRequest [GET]>
print(ret)

ret = response.headers
print(ret)

ret = response.url
print(ret)

ret = response.status_code
print(ret)

ret = response.text  # 返回是str类型的数据
print(ret)
# Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。
# 你可以找出 Requests 使用了什么编码,并且能够使用 response.encoding 属性来改变它

ret = response.content  # 返回是bytes类型的数据
print(ret)

coo = response.cookies
print(coo)  # <RequestsCookieJar[<Cookie H_PS_PSSID=1420_21094_30495_22157 for .baidu.com/>, <Cookie delPer=0 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=0 for www.baidu.com/>]>
coo = response.cookies.get_dict()
print(coo)  # {'H_PS_PSSID': '1420_21094_30495_22157', 'delPer': '0', 'BDSVRTM': '0', 'BD_HOME': '0'}

ret = response.json()
print(ret)

ret = response.encoding  # 从http中猜测编码  # 还可以通过这个属性设置正确的编码
print(ret)  # ISO-8859-1

ret = response.apparent_encoding  # 从内容中分析出编码,这个更加准确
print(ret)  # utf-8

ret = response.elapsed  # 流逝了多少时间
print(ret)

ret = response.history  # [<Response [302]>]
print(ret)
# 默认情况下,除了request.head(), Requests 会自动处理所有重定向。可以使用响应对象的 history 方法来追踪重定向。
# Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。
# 重定向:浏览器发送请求,服务器返回重定向的状态码和location,没有响应体。浏览器会自动再发送给location的url一次请求,才能得到响应体。
# Request URL: https://static.zhihu.com/heifetz/main.app.585bb6255dc0a63109f3.js
# Referer: https://www.zhihu.com/signin?next=%2F  # 从哪个网页过来的(去请求js)
# Location:https://www.zhihu.com/signin?next=%2F  # 重定向到这个url

  

  

猜你喜欢

转载自www.cnblogs.com/yzg-14/p/12190146.html
今日推荐