活动地址:优快云21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰!
一、浅入requests
1、简单介绍requests
requests模块是一个http模块,主要用于发送请求获取响应,此模块有很多的可代替模块,例如urlib模块,但是requests模块代码简洁易懂,编写的爬虫代码会更少,所以requests模块在爬虫中备受欢迎。
2、requests模块的安装
requests模块是第三方库,需要在cmd命令框或者pycharm的终端窗口运行pip install requests即可。
二、requests库的使用
1、常用属性或方法
方法/属性 说明 response=requests.get(url) 发送请求获取响应对象(常用的get请求方式) response=requests.post(url) 发送请求获取响应对象(post请求方式) response.url 响应的url(有时候响应的url和请求的url并不一致) response.status_code
响应状态码,如200,404,500 response.request.headers 响应对应的请求头 response.headers 响应头 response.request.cookies 响应对应请求的cookie,返回cookieJar类型 response.cookies 响应的cookie(经过了set-cookie动作,返回cookieJar类型) response.json() 自动将json字符串类型的响应内容转化为python对象(字典或者列表) response.text 返回响应内容,str类型 response.content 返回响应内容,bytes类型 案例:通过requests向百度首页发送请求,获取页面源代码
import requests # 目标网址 url = "http://www.baidu.com/" # 发送请求获取响应 response = requests.get(url) # 查看响应对象的类型 print(type(response)) # 查看响应状态码 print(response.status_code) # 查看响应内容的类型 print(type(response.text)) # 查看cookies print(response.cookies) # 查看响应的内容 print(response.text)
运行结果:
2、response.text和response.content的区别:
response.text
response.content 类型 str bytes 解码类型 requests模块自动根据http头部对响应的编码做出有根据的推测,推测的文本编码。
没有指定,执行挑选 通过对response.content进行decode,来解决中文乱码:
response.content.decode():默认utf-8
response.content.decode('GBK')
常见的编码字符集:
utf-8
gbk
gb2312
asci
iso-8859-1
案例:
import requests # 目标网址 url = "http://www.baidu.com/" # 发送请求获取响应 response = requests.get(url) # 手动设置编码格式 response.encoding = 'utf8' # 打印源码的str类型数据 print(response.text) # response.content是存储的bytes类型的响应数据,进行decode操作 print(response.content.decode('utf-8'))
运行结果:
3、发送带headers参数请求
获取headers:
打开浏览器—右键—检查—刷新网页—点击Network找到对应网址,找到User-Agent并且复制下来
headers参数接受字典形式的请求头,请求头字段名作为key,字段对应的值作为value
案例:
import requests # 目标网址 url = "http://www.baidu.com/" # 构建请求头字典,最重要的就是User-Agent # 如果需要其他请求头,就在headers字典中加上 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103' } # 发送请求获取响应 response = requests.get(url,headers=headers) print(response.text)
运行结果:
4、发送带参数的请求
如何删除网页中多余的参数?
通过一个一个删除参数并刷新得到
①网址中带参数
import requests # 目标网址 url = "https://www.baidu.com/s?wd=python" headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'} # 发送请求获取响应 response = requests.get(url,headers=headers) print(response.text)
②通过params构造参数字典
import requests # 目标网址 url = "https://www.baidu.com/s?" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'} # 请求参数是一个字典 kw = {'wd': 'python'} # 发送请求的时候设置参数字典,获取响应 response = requests.get(url, headers=headers, params=kw) print(response.text)
5、在headers参数中携带cookie
网站经常利用请求头中的Cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加Cookie,模拟普通用户的请求。Cookie具有时效性过一段时间需要更换。
cookie查找与添加的方式和发送带headers参数请求一样。
6、超时参数timeout的使用
在平时网.上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能任然没有结果。在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。
使用方法:
response = requests.get(ur1, timeout=3) # 发送请求后3秒钟内返回响应,否则异常
7、proxies代理参数的使用
为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,所以我们需要使用代理ip
使用:
response = requests.get(url, proxies=proxies)
proxies是字典形式
proxies = { "http": "http://12.34.5679:9527", "https": "https://12.34.5679:9527", }
如果proxies字典中包含多个键值对,发送请求时按照url地址的协议来选择使用对应的代理ip
8、发送post请求
response = requests.post(url, data) # data参数接收一个字典
如何找到data表单?
找到对应的请求,往下滚动找到Form data表单
代码中构造data字典
import requests url = "https://fanyi.baidu.com/" data = { 'query': '爱' } response = requests.post(url) print(response.text)
运行结果:
以上便是小y的学习笔记,小y希望和大家共同进步!
欢迎点赞+收藏+关注!