当前位置: 首页 > news >正文

python request库的使用

安装和使用

        requests库支持python3.8+,注意版本

pip install requests

        在项目中引用时如下:

import requests

访问网站

        request访问网站一般用get和post两种方式

        get

        requests库提供了get方法,可以用get方式访问网站,相当于在浏览器输入网址直接访问

import requestsurl = "https://httpbin.org/ip"reponse = requests.get(url=url)

        get方法有时需要参数,get方式可以用params参数携带。

import requestsurl = "https://httpbin.org/get"
data = {"key1":"value1","key2":"value3","key3":"value3",
}reponse = requests.get(url=url,params=data)

        post

使用方式和get基本相同,只是传递参数时的属性名不同

import requestsurl = "https://httpbin.org/post"data = {"name":"测试"
}
# post请求获取数据并向页面传递数据
reponse = requests.post(url,data=data)

请求头

        请求头通过header参数设置,get和post都可以通过此参数设置请求头 。

import requestsheader = {"user-agent" : "Mozilla/5.0 (Windows N Edg/129.0.0.0"
}
url = "https://httpbin.org/get"
reponse = requests.get(url,headers=header)

        header中的信息可以去浏览器控制台获取

        首先访问要爬取的网站,然后在控制台网络下找到网页文件,找到对应信息即可。一般都是网络中的第一个文件,文档类型为document。

        请求标头中的就是我们可以设置的。 

获取页面 

        在上面的代码中我们用reponse接收了请求的结果,reponse有很多属性。若直接print(reponse)则会显示状态码信息。

        reponse的属性如下:

  1. status_code: 整数,HTTP请求的返回状态码,如200表示成功,404表示未找到资源。

  2. url: 字符串,最终获取资源的URL。在重定向的情况下,这可能与原始请求的URL不同。

  3. headersCaseInsensitiveDict类型的字典,包含服务器响应的HTTP头部信息。这个字典对键不区分大小写。

  4. encoding: 字符串,从HTTP头部中猜测的响应内容编码方式。如果头部中没有指定charset,则默认为ISO-8859-1。

  5. apparent_encoding: 字符串,从内容中分析出的响应内容编码方式,通常比encoding更准确。

  6. text: 字符串,HTTP响应内容的文本形式。根据HTTP头部中的编码(默认为ISO-8859-1)或apparent_encoding来解码。

  7. content: 二进制数据,HTTP响应内容的原始二进制形式。在处理非文本响应(如图片、视频等)时非常有用。

  8. json(): 方法,不是属性,但非常重要。尝试将响应内容解析为JSON格式。如果内容不是有效的JSON,将抛出异常。

  9. linksRequestsLinkHeader对象(或类似),解析Link头部字段的值,提供了对分页链接等信息的便捷访问(尽管这取决于服务器是否提供了Link头部)。

  10. history: 列表,包含了一个或多个Response对象,表示请求过程中的重定向历史。如果请求没有被重定向,这个列表将是空的。

  11. cookiesRequestsCookieJar对象,包含从服务器发送回来的cookie信息。注意,这些cookie不会自动用于后续的请求,除非你使用了Session对象。

  12. elapseddatetime.timedelta对象,表示从发送请求到接收响应之间的时间差。

  13. request: 发送此响应的PreparedRequest对象。这个对象可以用来进一步分析或重新发送请求。

  14. status_line: 字符串,完整的HTTP状态行,如"200 OK"

  15. close(): 方法,不是属性,但值得一提。用于关闭与响应相关的文件描述符。通常,在大多数情况下,你不需要手动调用此方法,因为Requests库会在处理完响应后自动为你关闭它们。然而,在某些情况下,如果你想要立即释放系统资源,可以手动调用此方法。

可以通过reponse.属性名来访问:

         

         其中较为常用的有text,encoding,header,json(),cookie

cookie

        cookie是浏览器保存在本地的一些数据,记录一些用户信息。可以先在浏览器中登录然后控制台中拿到cookie。

import requests# url = "https://baidu.com"
url = "https://httpbin.org/cookies"
# 请求头信息
header = {"user-agent":"Mozilla/5.0 (Win.36 Edg/129.0.0.0"
}
# 设置cookie
cookies = dict(cookies_args="hello world")
# 两种写法均可
# cookies = {  
#     'username': 'john_doe',  
#     'session_token': 'abcdef123456'  
# }  reponse = requests.get(url,headers=header,cookies=cookies)

保存数据

        保存数据一般是保存request.content或request.text,写入到本地即可。一般的网页用w模式即可。

        这里的代码用到了bs4,于明天的推文中详解。

import requests
from bs4 import BeautifulSoupurl = "https://bj.zu.ke.com/zufang"header = {"user-agent":"Mozilla/5.0 (Windows NT 9.0.0.0"
}reponse = requests.get(url,headers=header)
soup = BeautifulSoup(reponse.text)
links = soup.select("a.twoline")
print(links)
links = [f"https://sy.zu.ke.com{i.attrs.get('href')}" for i in links]
for i in links:reponse = requests.get(i,headers=header)with open(f"./house/{i[29:50]}.html","w",encoding="utf-8") as f:f.write(reponse.text)

        如果网站对应的是图片或者视频等二进制文件,应使用reponse.content,同时打开模式应改为wb。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《C++编程魔法:构建绿色主题的奇幻游戏世界》
  • T检验:一种通俗易懂的统计分析方法
  • 渗透测试类 面试题
  • 在spring boot项目中使用jaxb实现Java Bean与XML互转
  • Note_XML学习笔记
  • 【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
  • C++学习笔记(41)
  • 计算机毕业设计hadoop+hive航班预测系统 飞机票航班数据分析可视化大屏 机票预测 机票爬虫 飞机票推荐系统 大数据毕业设计
  • 多媒体领域格式汇总
  • JavaScript --- 字符串常用方法(2)
  • 【图虫创意-注册安全分析报告-无验证方式导致安全隐患】
  • 2024/9/23 leetcode 148题 排序链表
  • CentOS修改主机名
  • 内核是如何接收网络包的
  • 变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Angular4 模板式表单用法以及验证
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C++11: atomic 头文件
  • Date型的使用
  • Debian下无root权限使用Python访问Oracle
  • java8-模拟hadoop
  • JavaScript DOM 10 - 滚动
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Python语法速览与机器学习开发环境搭建
  • tensorflow学习笔记3——MNIST应用篇
  • 计算机在识别图像时“看到”了什么?
  • 将回调地狱按在地上摩擦的Promise
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 微信开源mars源码分析1—上层samples分析
  • Prometheus VS InfluxDB
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #13 yum、编译安装与sed命令的使用
  • #git 撤消对文件的更改
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #预处理和函数的对比以及条件编译
  • $.ajax()参数及用法
  • $nextTick的使用场景介绍
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (黑马C++)L06 重载与继承
  • (十六)Flask之蓝图
  • (一)appium-desktop定位元素原理
  • (译)计算距离、方位和更多经纬度之间的点