Python3 request库基本使用

Python3 request库基本使用

安装request库

pip install requests

国内可以使用豆瓣源进行安装

pip install -i https://pypi.douban.com/simple/ requests

1.Get请求发送

这里以百度为例子,比如我搜索 豆瓣源 ,直接粘贴浏览器地址栏如下:

https://www.baidu.com/baidu?wd=pip%E8%B1%86%E7%93%A3%E6%BA%90&tn=monline_4_dg&ie=utf-8

这里用request进行实现

from requests import get

#定义请求地址
req_url="https://www.baidu.com"
#定义GET请求数据
req_params={"wd":"豆瓣源",
            "tn":"monline_4_dg",
            "ie":"utf-8"}
#执行GET请求

search_result = get(url=req_url,params=req_params)
if 200 == search_result.status_code:
    print(search_result.text)
    #尝试解决乱码问题
    print(search_result.content.decode("utf-8"))

这里说下返回结果的 content方法和text方法的关系,text返回的是处理过的Unicode型的数据,而使用content返回的是bytes型的原始数据,也就是说content是把内容bytes返回. 而text是decode成Unicode. 如果headers没有charset字符集的化,text()会调用chardet来计算字符集,如果HTTP响应中Content-Type字段没有指定charset,则默认页面是’ISO-8859-1’编码。所以遇到这种情况有的时候需要我们手动进行转码。当然requests库为我们提供了现成的方法,你也可以使用如下的方法获取指定的字符集:

search_result.encoding = search_result.apparent_encoding
print(search_result.text)

查看返回的结果并没有我们需要的内容,这里我们复制浏览器的请求头模拟浏览器搜索试试:

安装copyheaders

pip install copyheaders

拷贝浏览器请求头,然后尝试请求,代码如下:

from requests import get
from copyheaders import headers_raw_to_dict

req_header=b'''
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.baidu.com
Connection: keep-alive
'''

#定义请求地址
req_url='https://www.baidu.com'
#定义GET请求数据
req_params={"wd":"豆瓣源",
            "tn":"monline_4_dg",
            "ie":"utf-8"}
#执行GET请求
search_result = get(url=req_url,params=req_params,headers=headers_raw_to_dict(req_header))
if 200 == search_result.status_code:
    #尝试解决乱码问题
    search_result.encoding = search_result.apparent_encoding
    print(search_result.text)

现在可以看到请求到的结果和没有添加浏览器标识的情况下完全不一样

2.Post请求发送

同理我们尝试一下发送Post请求

from requests import post
import requests
headers={'Content-Type':"application/json"}
#添加请求地址
req_url="https://baidu.com"
req_data ={"part1":"part1"}
#不再打印警告信息
requests.packages.urllib3.disable_warnings()
r = post(url=req_url,json=req_data,headers=headers,verify=False)
r.encoding = r.apparent_encoding
print(r.text)

如果是以Form表单的形式提交请求应该怎样发送?这里需要安装另外的拓展包

pip install requests_toolbelt

from requests import post
import requests
import string
import random
from requests_toolbelt import MultipartEncoder
headers={'Content-Type': 'multipart/form-data'}
#添加请求地址
req_url="https://baidu.com"
req_data ={"part1":"part1"}
#不再打印警告信息
requests.packages.urllib3.disable_warnings()

m = MultipartEncoder(
        fields=req_data,
        boundary='------' + ''.join(random.sample(string.ascii_letters + string.digits, 32))
    )
headers['Content-Type'] = m.content_type
r=requests.post(req_url,data=m,headers=headers,verify=False)
r.encoding = r.apparent_encoding
print(r.text)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值