一、requests安装
Github : https:github.com/requests/requests
官方文档: http://www.python-requests.org
PyPI :https://pypi.python.org/pypi/requests
pip安装
pip install requests
wheel安装
安装wheel库
pip install wheel
二、基本使用用例
import requests
r = requests.get("http://www.baidu.com/")
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)
我们调用get()方法进行请求操作,得到一个Response对象,然后分别输出了Response的类型,状态码,响应体的类型,内容以及Cookies,返回的类型是request.models.Response,响应体的类型是Str,Cookies的类型是RequestsCookieJar
三、GET请求
3.1、GET基本请求
r = requests.get("http://httpbin.org/get")
print(r.text)
运行结果:
GET请求中,返回结果中包含了请求头,URL,IP地址。
利用params添加请求参数
data = {
'name': 'Gemery',
'age': '22'
}
response = requests.get("http://httpbin.org/get", params=data)
print(response.text)
将参数加入到链接中进行请求。
网页返回类型实际上是Str类型的,但是确实JSON格式的。所以如果想直接解析结果,得到一个字典格式的话,可以直接调用json()方法。
data = {
'name': 'Gemery',
'age': '22'
}
response = requests.get("http://httpbin.org/get", params=data)
print(type(response.text))
print(response.text)
print("-----------------")
print(type(response.json()))
print(response.json())
3.2、抓取网页
以抓取知乎搜索页面的标题内容为例
# 用于模拟浏览器请求
heads = {
'User-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'
}
r = requests.get("https://www.zhihu.com/explore", params=heads)
pattern = re.compile('explore-feed.*?question_link.*?>(.*?)</a>', re.S)
titles = re.findall(pattern, r.text)
print(titles)
3.3、抓取二进制数据
图片,音频,视频文件本质上是二进制码组成的,有特定的保存格式和响应的解析方法。如果想爬取文件,需要拿到他们的二进制码。
response = requests.get("https://github.com/favicon.ico")
print('-----response.text-------')
print(response.text)
print('-----response.content-------')
print(response.content)
with open('D://favicon.ico', 'wb') as f:
f.write(r.content)
这里调用open()方法,第一个参数是文件名称,第二个参数代表二进制写的形式打开,可以向文件里写入二进制数据。
四、POST请求
import requests
data = {'name': 'Gemery', 'age': 22}
r = requests.post("http://httpbin.org/post", data = data)
print(r.text)
我们可以看到参数以form形式提交
五、响应
r = requests.get("http://www.baidu.com")
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print(type(r.history), r.headers)
状态码用于判断请求是否成功,requests还提供了一个内置的状态码查询对象requests.code,
r = requests.get("http://www.baidu.com")
exit() if not r.status_code == requests.codes.OK else print("request success")