requests模块

Requests模块是一个用于网络访问的模块。

目录

一、导入

二、请求url

1.发送无参数的get请求:

2.通过  params  关键字发送带参数的get请求

还可以传递一个list给一个请求参数:可以看到确实访问了正确的url。

3.发送post请求

post请求参数是以data关键字参数来传递的

在requests模块中,又加入了json这个关键字参数,可以直接发送json数据给post请求

在request模块中,用files参数可以post一个文件

还可以在post文件时指定文件名等额外的信息:

三、获取返回信息

response.text       获取文本内容

response.content    获取字节流内容

response.json()       获取json格式的数据

response.raw.read()        获得服务器返回的原始数据

response.status_code    获得到响应状态码

四、关于headers

response.headers       打印出响应头:

response.request.headers       打印出请求头:

自定义的headers(通过headers关键字参数传递):

五、关于Cookies

response.cookies       获得响应中的cookies值

自定制的cookies(使用cookies关键字参数):

六、关于重定向

response.history       查看重定向

allow_redirects 参数      禁止服务器自动重定向

七、关于请求时间

timeout参数           设定url的请求超时时间(时间单位为秒):

八、关于代理

proxies关键字参数    指定代理来进行http或https访问

九、关于session

十、下载页面


 

一、导入

安装:在cmd窗口输入:

pip install requests

下载完成后,导入模块很简单,代码如下:

import requests

二、请求url

这里我们列出最常见的发送get或者post请求的语法。

1.发送无参数的get请求:

response = requests.get("http://www.baidu.com/")

现在,我们得到了一个响应对象response,我们可以利用这个对象得到我们想要的任何信息。

2.通过  params  关键字发送带参数的get请求

payload={'key1':'value1','key2':'value2'}
response=requests.get("http://www.baidu.com/",params=payload)

测试是否正确:

print(response.url)

# http://www.baidu.com/?key1=value1&key2=value2

还可以传递一个list给一个请求参数:可以看到确实访问了正确的url。

payload={'key1':'value1','key2':["'value2'","value3"]}
response=requests.get("http://www.baidu.com/",params=payload)

print(response.url)

# http://www.baidu.com/?key1=value1&key2=%27value2%27&key2=value3

举例:

import requests

url = "http://www.mmthat.com/viewthread.php?tid=1195561&extra=page%3D1"

# header = {
#     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36',
#     'Cookie': '2572147169_todaycount=0; 2572147169_totalcount=18598; x-stgw-ssl-info=8e01a4c48521612eac9fcee4c95e2751|0.014|1550323043.115|56|.|I|TLSv1.2|ECDHE-RSA-AES128-GCM-SHA256|52500|h2|0; RK=heYEibZxv3; ptcz=6a0a0a41d85d9a5c3454165d6d3ccaea77cc5560bb42a0ba754d5a497bc2eafa; pgv_pvi=283785216; pgv_pvid=158917645; qz_screen=1536x864; QZ_FE_WEBP_SUPPORT=1; __Q_w_s__QZN_TodoMsgCnt=1; __Q_w_s_hat_seed=1; ptisp=cm; Loading=Yes; osstat=16; qqmusic_uin=; qqmusic_key=; qqmusic_fromtag=; pgv_info=ssid=s9281594176; pgv_si=s7002632192; _qpsvr_localtk=0.538144406285773; qzmusicplayer=qzone_player_2572147169_1550322963116; scstat=16; x-stgw-ssl-info=867c32540f06d372e03add1cef72cd02|0.005|1550322975.246|55|.|I|TLSv1.2|ECDHE-RSA-AES128-GCM-SHA256|55500|h2|0; cpu_performance_v8=17; zzpaneluin=; zzpanelkey=; _qz_referrer=i.qq.com; uin=o2572147169; skey=@mYKKfLNf1; qzone_check=2572147169_1550323046; p_uin=o2572147169; pt4_token=xnrkYfh*tu4HVGBPJamsn*IPfVZ-jpVeNAKATAPgz14_; p_skey=zGIQoKXbncDuCDVAEk5LaYqeUKcx0ZUczyBAUWXbyJs_',
#     "referer": "https://qzs.qzone.qq.com/qzone/v5/loginsucc.html?para=izone&specifyurl=http%3A%2F%2Fuser.qzone.qq.com%2F2572147169%2Finfocenter",
# }

cookies = {'cdb_sid': 'U6sKQ2',
           'is_use_cookied': 'yes',
           'is_use_cookiex': 'yes',
           'cdb_cookietime': '2592000',
           'cdb_auth': 'sB2zgeM2DD9ztSlD73NsMO79zlzUxLoZ9HJrdUhA5lqrejEszorzKneV7rI4EmKSlR1Svf3%2FS8Cu'}
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36',
    "Referer":"quote",
}

response = requests.get(url, headers=header,cookies=cookies)
# response = requests.request("GET",url)

response.encoding = "utf-8"
html = response.content.decode("gbk")
print(html)

3.发送post请求

post请求参数是以data关键字参数来传递的

response= requests.post("http://www.baidu.com/", data={'key1':'value1'})

在requests模块中,又加入了json这个关键字参数,可以直接发送json数据给post请求

data_json = {'key1':'value1'}
response= requests.post("http://www.baidu.com/", json=data_json)

在request模块中,用files参数可以post一个文件

url='http://www.baidu.com/'
files={'file':open('demo.txt','rb')}
response=requests.post(url,files=files)

print(response.url)    # http://www.baidu.com/
print(response.content)    # 二进制的网页内容
print(response.text)    # 网页内容(好像乱码)

还可以在post文件时指定文件名等额外的信息:

url = 'http://www.baidu.com/'
files = {'file': ('demo.txt', open('demo.txt', 'rb'),{'Expires':'0'})}  # Expires:  0 ,无效格式日期
response = requests.post(url, files=files)

注意:强烈建议使用 “带b” 模式打开文件,因为如果以文本文件格式打开时,可能会因为“Content-Length”这个header而出错。

举例:

import requests

url = "https://fanyi.baidu.com/basetrans"
data = {'query': '我',
        'from': 'zh',
        "to": "en",
        'token': '5ae118aed1a19d06e0825ec80415bcb2',
        'sign': 569291.806138
        }
header = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
}
response = requests.post(url, data=data, headers=header)
html_str = response.content.decode()
print(html_str)

 

 

三、获取返回信息

发送请求后获取返回信息:

response.text       获取文本内容

import requests
url = 'http://www.baidu.com/'
response = requests.get(url)
response.encoding = "utf-8"     #默认为 ascii 此处将编码格式改为 utf-8
# print(response.encoding)
print(response.text)        # 网页响应内容

response.content    获取字节流内容

这个和response.text有什么区别呢?

r.content返回的是字节流,如果我们请求一个图片地址并且要保存图片的话,就可以用到,这里举个代码片段如下:

import requests
url = 'https://tpc.googlesyndication.com/simgad/18045151779926303483'
response = requests.get(url)
print(response.content)        # 返回是 字节

with open("a.png","wb") as f:
    f.write(response.content)

response.json()       获取json格式的数据

如果请求对应的响应是一个json,这个方法可以直接拿到json格式的数据。

response.raw.read()        获得服务器返回的原始数据

注意:请求时加上“stream=True”

import requests
url = 'https://tpc.googlesyndication.com/simgad/18045151779926303483'
response = requests.get(url,stream=True)        # 此处多一个参数
print(response.raw.read())

response.status_code    获得到响应状态码

import requests
url = 'http://www.baidu.com/'
response = requests.get(url)
print(response.status_code)    # 200

 

四、关于headers

response.headers       打印出响应头:

print(response.headers)        # 返回一个字典类型
# {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'Keep-Alive'}

response.request.headers       打印出请求头:

print(response.request.headers)

自定义的headers(通过headers关键字参数传递):

import requests
url = 'http://www.baidu.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36',
}
response = requests.get(url,headers=headers)    # 此处加上参数 headers

response.encoding = "utf-8" 
print(response.text) 

 

五、关于Cookies

response.cookies       获得响应中的cookies值

import requests
url = 'http://www.baidu.com/'
response = requests.get(url )
print(list(response.cookies))

# [Cookie(version=0, name='BDORZ', value='27315', port=None)]

自定制的cookies(使用cookies关键字参数):

1)一种方式:

import requests
url = 'http://www.baidu.com/'
cookies = {'cdb_sid': 'U6sKQ2'}
response = requests.get(url,cookies=cookies)    # cookies 关键字参数

2)第二种方式:

import requests
url = 'http://www.baidu.com/'
headers = {"User-Agent":"...","Cookie":"cookie字符串"}    #cookie 放到headers 里面
response = requests.get(url,headers =headers )    

 

 

六、关于重定向

response.history       查看重定向

print(response.history)    # 获取到响应的重定向网址,没有返回一个空列表

allow_redirects 参数      禁止服务器自动重定向

response = requests.get('http://www.baidu.com', allow_redirects=False)

 

七、关于请求时间

timeout参数           设定url的请求超时时间(时间单位为秒):

requests.get('http://www.baidu.com', timeout=1)   

八、关于代理

proxies关键字参数    指定代理来进行http或https访问

__proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080",
}
requests.get("http://www.baidu.com", proxies= __proxies)

 

九、关于session

我们需要登录某个网站,然后才能请求相关url,这时就可以用到session了,我们可以先使用网站的登录api进行登录,然后得到session,最后就可以用这个session来请求其他url了:

import requests

session=requests.Session()    #实例化session    可以自己把他想象成 response

login_data={'form_email':'你的邮箱','form_password':'你的密码'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36',}

url = "http://www.renren.com/PLogin.do"
session.post(url,headers= headers, data= login_data)
#服务器设置在本地的cookie会保存到session中,url就是登录是否的from表单中的action地址。

response = session.get('http://www.renren.com/327550029/profile')
print(response.text)

 

十、下载页面

使用Requests模块也可以下载网页,代码如下:

import requests
url = 'http://www.baidu.com/'
response = requests.get(url)
with open("new_html.html","wb") as new_html:
    new_html.write(response.content)        # 写入内容

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值