1.requests库
虽然python的标准库中urllib模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人感觉不太好,而 Requests宣传的是“HTTP for Human”,说明使用更简洁方便
1.1.最简单的发送get请求就是通过requests.get来调用:
response=request.get("http://www.baidu.com")
1.2.添加headers和查询参数:
如果想添加headers,可以传入headers参数来增加请求头中的header信息。如果要将参数放在url中传递,可以利用params参数。相关示例代码如下:
response = requests.get('https://www.baidu.com/s', params=params, headers=headers)
2.requests基本操作
import requests
response=requests.get("http://www.baidu.com")
print(type(response.text)) # str类型
print(response.text) # 结果显示中文的是乱码(没啥用)
print(type(response.content)) # bytes类型
print(response.content.decode('utf-8'))
# 使用decode('utf-8')进行解码为str类型
print(response.url) # 表示当前访问的url
print(response.encoding) # 表示当前的编码方式
print(response.status_code) # 表示状态码
3.get请求方式
import requests
'''
当发送请求的时候需要传递一些参数,那么该怎么去传?
首先传入的参数使用的是字典形式 如:kw={'wd':'中国'}
1.当发送的是get请求,需要传参时用的是params
2.当发送的是post请求,需要传参时用的是data
'''
params = {
'wd': '中国'
}
headers = {
'User-Agent': 'Mozilla/5.0 ',
'Cookie': 'BIDUPSID=0C8AC3AF3D69B268510CA09D14; PSTM=1653105; BD_UPN=12314753; '
'BAIDUID=5C54723A643BE57083237950AAF6:FG=1; '
# 当时不添加cookie只添加User-Agent,访问百度会出现图形验证信息(识别出爬虫了)
}
# 当传入参数的时候,url链接后应添加一个s
response = requests.get('https://www.baidu.com/s', params=params, headers=headers)
print(response.url)
当时不添加cookie只添加User-Agent,访问百度会出现图形验证信息(识别出爬虫了):
当访问链接时,出现百度安全验证:
当添加cookie信息,进行伪装浏览器的时候:
点击链接出现:
4.关于requests库的总结:
总结:
1.发送get请求:
发送get请求,直接调用‘requests.get’就可以了,想要发送什么类型的请求,就调用什么方法。
2.responses的一些属性:
2.1:接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response=requests.get("http://www.baidu.com/s",param=kw,headers=headers)
2.2:查看响应内容,response.text 返回的是Unicode格式的数据
response.text
2.3:查看响应内容,response.content返回字节流数据
response.content
2.4:查看完整url地址
response.url
2.5:查看响应头部字符编码
response.encoding
2.6:查看响应码
response.status_code
3.response.text和response.content的区别:
3.1:response.content:这个是直接从网络上面抓取的数据,没有经过任何解码。所以是一个bytes
类型。其实在硬盘上和在网络上传输的字符串都是bytes类型
3.2:response.text:这个是str数据类型,是requests库将response.content进行解码的字符串。解码需要
指定一个编码方式,requests会根据自己的猜测来判断编码的方式。所以有时候可能会猜测错误,
就会导致解码产生乱码。这时候应该使用:
response.content.decode('utf-8')
进行手动解码



