Python requests模块简介 (一)
requests模块是python的一款基于网络请求的模块,功能强大,代码简便,效率极高。
requests模块能模拟浏览器发送请求,并且接收响应数据。
requests是第三方模块,使用时需要下载安装。
pip install requests
# 若出现下载超时,换源即可
# 示例
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 阿里云 http://mirrors.aliyun.com/pypi/simple/
# 豆瓣http://pypi.douban.com/simple/
# 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
# 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
# 华中科技大学http://pypi.hustunique.com/
一、request 请求
使用 Requests 发送网络请求非常简单。
示例:
# 导入requests模块
import requests
# get方式发送请求
resp = requests.get("url")
# post方式发送请求
resp = requests.post("url")
request(url,params=None, headers=None, cookies=None,timeout=None,
allow_redirects=True, proxies=None,verify=None, data=None):
request请求有许多参数,常用参数如下:
1.url 请求地址
通过向某一个地址发送请求,并获取到数据。
import requests url = "https://www.baidu.com/s?" resp = requests.get(url) print(resp) # <Response [200]>
2.params 请求参数
可将get请求的参数以字典的形式存放在params里面,发送请求时携带即可。
# https://www.baidu.com/s?wd=雪花 import requests url = "https://www.baidu.com/s?" params = { "wd":"雪花" } resp = requests.get(url,params=params) print(resp.url)
3.headers 请求头
如果想自定义请求的Headers,同样的将字典数据传递给headers参数。
请求头的作用是进行伪装,一般伪装成浏览器请求。
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" } url = "https://www.baidu.com?" resp = requests.get(url,headers=headers) resp.encoding="utf-8" print(resp.text)
4.超时
设置超时,一旦超过设置时间,则会抛出异常。
import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" } url = "https://www.baidu.com?" resp = requests.get(url,headers=headers,timeout=0.01) resp.encoding="utf-8" print(resp.text)
5.proxies 代理
当我们请求的ip有风险时,可以使用代理,同样构造代理字典,传递给proxies参数。
import requests proxy = {"http":"127.0.0.1:80"} # 代理ip、端口 resp = requests.get("http://httpbin.org/ip",proxies=proxy) print(resp.text)
6.allow-redirects 重定向
很多网站是http开头,为了不影响老客户,原网站不动,当访问http的原网址时,重定向到新的https网址,在requests中 allow_redirects默认是True,如果是False则不允许重定向,也就无法重定向新网址获取数据。
import requests url = "http://github.com" resp = requests.get(url,allow_redirects=False) print(resp.url)
7.verify 证书验证
有时候再打开一个网站的时候,会出现安全证书验证,会导致爬虫获取不到数据,所以我们就需要关闭证书验证。在请求的时候把verify参数设置为False就可以关闭证书验证了。
import requests url = "https://www.baidu.com/s?" resp = requests.get(url, verify= False) print(resp)

如果想关闭警告,可以使用warnings模块
import requests, warnings warnings.filterwarnings('ignore') # 忽略所有警告 url = "https://www.baidu.com/s?" resp = requests.get(url, verify=False) print(resp)
二、response对象
request请求会返回一个response对象。
import requests url = "https://www.baidu.com/s?" resp = requests.get(url) # 返回一个response对象
response对象有许多属性:
1. text
HTTP 响应内容的字符串形式,即url所对应的页面内容。
print(resp.text)
2.content
HTTP 响应内容的二进制形式(bytes类型,也就是字节流),通常获取图片、音频、视频等媒体文件时用该属性。
print(resp.content) # 一般接收后会保存下来,而不是打印
3.status_code
状态码。请求的返回状态,200表示连接成功。
print(resp.status_code) # 200 int格式
4.headers 响应头
print(resp.headers)
5.cookies
响应cookies
print(resp.cookies)
6.url
响应url
print(resp.url) # https://www.baidu.com/
7.request.headers
请求头
url = "https://www.baidu.com?" resp = requests.get(url) print(resp.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" } url = "https://www.baidu.com?" resp = requests.get(url, headers=headers) print(resp.request.headers) # {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
上述示例可以很明显的看出如果不加user-agent,python会自动加上一个带有python字样的user-agent进行request请求,所以很容易从请求头就能判断出是不是爬虫,然后或许会封ip。所以保持一个良好的习惯,每次写爬虫的时候都加上user-agent。
浙公网安备 33010602011771号