首页 > 编程语言 >Python-requests 模块

Python-requests 模块

时间:2022-10-27 21:44:25浏览次数:60  
标签:返回 请求 响应 Python url 模块 requests rsp

requests 模块

Python中原生的基于网络请求的模块, 主要用来发送 HTTP 请求, 简单便捷, 效率极高.

工作流程:

  1. 指定url
  2. 发起请求
  3. 获取响应数据
  4. 持久化存储

requests 请求

requests 方法如下:

方法 描述
delete(url, args) 发送 DELETE 请求到指定 url
get(url, params, args) 发送 GET 请求到指定 url
head(url, args) 发送 HEAD 请求到指定 url
patch(url, data, args) 发送 PATCH 请求到指定 url
post(url, data, json, args) 发送 POST 请求到指定 url
put(url, data, args) 发送 PUT 请求到指定 url
request(method, url, args) 向指定的 url 发送指定的请求方法

response 对象

每次调用 requests 请求之后, 会返回一个 response 对象, 该对象包含了具体的响应信息.

响应信息如下:

属性或方法 说明
apparent_encoding 编码方式
close() 关闭与服务器的连接
content 返回响应的内容, 以字节为单位
cookies 返回一个 CookieJar 对象, 包含了从服务器发回的 cookie
elapsed 返回一个 timedelta 对象, 包含了从发送请求到响应到达之间经过的时间量, 可以用于测试响应速度. 比如 r.elapsed.microseconds 表示响应到达需要多少微秒.
encoding 解码 r.text 的编码方式
headers 返回响应头, 字典格式
history 返回包含请求历史的响应对象列表(url)
is_permanent_redirect 如果响应是永久重定向的 url, 则返回 True, 否则返回 False
is_redirect 如果响应被重定向, 则返回 True, 否则返回 False
iter_content() 迭代响应
iter_lines() 迭代响应的行
json() 返回结果的 JSON 对象对应的python格式 (结果需要以 JSON 格式编写的, 否则会引发错误)
links 返回响应的解析头链接
next 返回重定向链中下一个请求的 PreparedRequest 对象
ok 检查 "status_code" 的值, 如果小于400, 则返回 True, 如果不小于 400, 则返回 False
raise_for_status() 如果发生错误, 方法返回一个 HTTPError 对象
reason xxxxxxxxxx3 1print(os.path.isdir("F:/python/NoDir"))  # False2print(os.path.isdir("F:/python"))        # True3print(os.path.isfile('./test.txt'))      # Truepython
request 返回请求此响应的请求对象
status_code 返回 http 的状态码, 比如 404 和 200(200 是 OK,404 是 Not Found)
text 返回响应的内容, unicode 类型数据
url 返回响应的 URL

简单使用

import requests

url = "https://www.cnblogs.com/"
rsp = requests.get(url)

print(rsp.encoding)  # utf-8
sc = rsp.text  # 获取页面源代码

with open("博客园.html", 'w', encoding='utf-8') as f:
    f.write(sc)

UA伪装

User-Agent:

  • Http协议中的一部分, 属于头域的组成部分.
  • UA是一种向访问网站提供你所使用的浏览器类型、操作系统、浏览器内核等信息的标识. 通过这个标识, 用户所访问的网站可以显示不同的排版, 从而为用户提供更好的体验或者进行信息统计. 例如, 百度、新浪等网站用手机访问和电脑访问是不一样的, 这是因为网站根据访问者的UA判断后, 进行了不同的设置和处理.
  • 通俗地讲, UA是请求载体的身份标识.

UA检测: 门户网站的服务器会检测对应请求的载体身份标识, 如果UA不是基于某一款浏览器, 则请求可能被拒绝.

import requests

url0 = "https://cn.bing.com/search?q=爬虫"

# 将url携带的参数以及请求头信息封装到字典中
url = "https://cn.bing.com/search?"
kw = input("Enter a keyword: ")
params = {
    'q': kw
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42"
}

rsp = requests.get(url=url, params=params, headers=headers)

file_name = kw + '.html'
encoding = rsp.encoding
with open(file_name, 'w', encoding=encoding) as f:
    f.write(rsp.text)

post 请求

  1. GET 请求的参数在url中可见, 隐私性安全性较差, 且参数长度有限
    POST 请求传递参数放在Request body中, 不会在url中显示, 比 GET 要安全, 且参数长度无限制
  2. GET 请求只能进行url编码
    POST 支持多种编码方式
  3. GET 请求刷新浏览器或回退时没有影响
    POST 回退时会重新提交数据请求
  4. GET 请求可被缓存
    POST 请求不会被缓存
  5. GET 请求比较常见的方式是通过url地址栏请求
    POST 最常见是通过form表单发送数据请求
import requests

# 请求行显示: POST /sug HTTP/1.1
url = 'https://fanyi.baidu.com/sug'
kw = input("输入要翻译的内容: ")
data = {
    "kw": kw
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 "
                  "Safari/537.36 Edg/106.0.1370.42 "
}
rsp = requests.post(url, data, headers=headers)

# 响应头显示: Content-Type: application/json
result_dic = rsp.json()
result = result_dic.get('data', "没有结果")
print(result)

JSON 数据

import requests
import json

url = 'https://movie.douban.com/j/chart/top_list?'
params = {
    'type': '17',  # '17'代表科幻类型
    'interval_id': '100:90',  # 好于100%-90%的科幻片
    'action': '',  # "playable+unwatched": "我没看过"以及"可在线播放"
    'start': '0',  # 索引从0开始
    'limit': '5'   # 5个结果
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 "
                  "Safari/537.36 Edg/106.0.1370.42"
}

rsp = requests.get(url, params, headers=headers)
result_dic = rsp.json()  # 响应结果是json类型数据
# result_str = rsp.text    以字符串的类型返回结果

with open('douban_rank.json', 'w', encoding='utf-8') as f:
    json.dump(result_dic, fp=f, ensure_ascii=False)

标签:返回,请求,响应,Python,url,模块,requests,rsp
From: https://www.cnblogs.com/khrushchefox/p/16834112.html

相关文章

  • Python中path中使用正则,及路由分发
    Pythonweb模版Django-15设置urls.py中的urlpatterns,用path方法时不能用正则表达式https://blog.csdn.net/Pansc2004/article/details/80495723      urlp......
  • 加密模块与subprocess模块跟日志模块
    hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2.为什么加密 保证数据的安全3.如何判断数据是否是加密的 一串没有规律的字符串(数字、字母、符......
  • hashlib模块、subprocess模块、loggin日志模块及实战
    hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2.为什么加密 保证数据的安全3.如何判断数据是否是加密的 一串没有规律的字符串(数字、字母、符......
  • python爬虫 数据解析
      RegularRxpression正则表达式(字符串语法匹配)常用元字符:  量词:  贪婪匹配(到最后一个匹配项停止,即全部匹配)和惰性匹配(匹配尽量少的对象,使用到回溯算法:先......
  • 微信小程序WXS功能模块
    好久没有看微信小程序的官方文档了,最近在开发个人小程序时,才发现WXS功能。有点跟不上节奏了!WXS模块代码可以写在WXML文件中的标签内,或者是以.wxs为后缀的文件内。每一个.w......
  • 加密模块与日志模块
    加密模块与日志模块hashlib加密模块简介1.何为加密加密就是将明文数据处理成让人看不懂的密文数据2.为什么要加密加密是为了保证一些重要的数据的安全3.如......
  • 加密模块、subprocess模块与日志
    加密模块、subprocess模块与日志hashlib加密模块加密将明文数据处理成密文数据。为什么加密,为了保证数据安全。判断数据是否加密已加密的数据,通常表现为毫无规律的一......
  • 10月27日内容总结——hashlib加密模块和logging、subprocess模块
    目录一、hashlib加密模块1、何为加密2、为什么加密3、如何判断数据是否以加密4、密文的长短有什么意义5、加密算法的基本操作二、加密补充说明三、subprocess模块1、subpro......
  • python异常捕获,使用try里面的变量提示未定义 name ‘num‘ is not defined
    //Anhighlightedblocktry:num=int(input("来个数:"))exceptExceptionasresult:print("~~~~")print(num)使用try进行异常捕获,若成功捕获到异常,则num变量没......
  • python 使用 isdigit 判断字符串中是否只由数字组成
    *********.isdigit()方法检测字符串是否只由数字组成。**************a="999"a.isdigit**这是可以的返回True**a="①"a.isdigit**一个圈里面一个数字的这种也是可以的......