数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 |
---|
文章目录
- 一、安装和基本使用
- 1. 安装
- 2. 基本使用
- 3. response常用属性
- 二、get请求
- 三、post请求
- 四、代理
一、安装和基本使用
1. 安装
- 和解析库urllib几乎一摸一样,但是有些业务场景,用request更加方便
最好对比utllib学习:https://blog.csdn.net/grd_java/article/details/140589367
- 官方文档:https://requests.readthedocs.io/projects/cn/zh-cn/latest/
企业中用的最多的就是requests,底层实现就是urllib,在python2和python3中通用,方法完全一样;简单易用
安装requests |
---|
- 执行命令pip install requests即可安装
- 代码中导包不报错表示安装成功
2. 基本使用
基本使用 |
---|
'''导包(start)'''
import requests
'''导包(end)'''
url = 'http://www.baidu.com'
# 通过get方式请求url
response = requests.get(url)
# 设置编码格式
response.encoding = 'utf-8'
# response对象的类型为Response类型,和urllib的HttpResopnse对象是不一样的
print(type(response))
# 以字符串形式返回网页源码
print(response.text)
# 获取响应状态码
print(response.status_code)
# 获取请求的url
print(response.url)
# 获取响应头
print(response.headers)
# 获取响应的字节类型
print(response.content)
3. response常用属性
response.text # 响应体 str类型
response.encoding #从HTTP header中猜测的响应内容的编码方式
respones.content #响应体bytes类型
response.status_code #响应状态码
response.request.headers #响应对应的请求头
response.headers #响应头
response.cookies #响应的cookie(经过了set-cookie动作)
response.url #获取访问的url
response.json() #获取ison数据 得到内容为字典(如果接口响应体的格式是ison格式时)
response.ok
# 如果status code小于200,response.ok返回True。
# 如果status code大于200,response.ok返回False.
response.text和response.content的区别
- response.text
- 类型:str
- 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
- 如何修改编码方式:response.encoding=“gbk/UTF-8”
- response.content
- 类型:bytes
- 解码类型:没有指定
- 如何修改编码方式:response.content.deocde(“utf8")
获取网页源码的通用方式:
- response.content.decode()
- response.content.decode(“UTF-8”)
- response.text
以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题。所以,更推荐使用 response.content.deocde()的方式获取响应的html页面
二、get请求
同样是百度,例如百度北京看搜索结果。requests库作为独属于python的,是不需要像urllib一样对参数编码的
'''导包(start)'''
import requests
'''导包(end)'''
url = 'http://www.baidu.com/s?' # 路径中的?可加可不加
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {
'wd':'北京'
}
# def get(url, params=None, **kwargs):
# url 请求资源路径
# params 参数
# kwargs 字典
response = requests.get(url=url, params=data, headers=headers)
response.encoding = 'utf-8'
content = response.text
print(content)
# 也可以一行搞定哦
print(response.content.decode('utf-8'))
可见对比urllib有以下几点不同
- 参数使用params传递
- 参数无需urlencode编码
- 不需要请求对象的定制
- 请求资源路径(url)中的?可以加也可以不加
把网络上的图片保存到本地
三、post请求
我们使用讲解urllib中的百度翻译的案例,看看实现同样的效果和urllib有何区别
- post请求,不需要编解码
- 请求参数是经典的data
- 不需要请求对象的定制
'''导包(start)'''
import requests
'''导包(end)'''
url = 'https://fanyi.baidu.com/sug'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {
"kw":"spider"
}
# def post(url, data=None, json=None, **kwargs):
# url 请求资源路径
# data 参数对象
# json json对象
# kwargs 字典
# 我们以传输data对象为例,传输json同理,将data换成json即可
response = requests.post(url=url, data=data, headers=headers)
content = response.text
# 因为content返回的不是utf-8编码格式,我们看起来比较费劲
# 通过json库将其转为utf-8
import json
obj = json.loads(content)
print(obj)
四、代理
依然和urllib完全一样的操作
'''导包(start)'''
import requests
'''导包(end)'''
url = 'http://www.baidu.com/s?'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {
"wd":"ip"
}
# 1. 获取代理handler对象,并指定代理ip字典proxies
proxies = {
'http': '218.87.205.38:20433',
}
response = requests.get(url = url, params=data, headers=headers,proxies=proxies)
content = response.text
with open('daili.html','w',encoding='utf-8') as fp:
fp.write(content)