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。

 

posted on 2023-04-11 15:26  木去  阅读(421)  评论(0)    收藏  举报