项目二:学会使用python爬虫请求库(小白入门级)

news2024/11/20 10:28:50

上一章已经了解python爬虫的基本知识,这一次让我们一起来学会如何使用python请求库爬取目标网站的信息。当然这次爬虫之旅相信我能给你带来不一样的体验。

目录

一、安装requests 库

简介

安装

步骤

1.requests的基本使用3步骤

2.查看所使用编码

3.设置编码

二、认识requests请求方法

GET请求

简介

基本语法

POST请求

简介

基本语法


一、安装requests 库

简介

requests库是一个Python HTTP客户端库,使得发送HTTP请求变得简单。

requests库提供了一种简洁直观的API,用于发送各种HTTP请求,如GET、POST、PUT、DELETE等,并处理返回的响应。

使用requests库,开发者可以轻松地添加头部信息、发送表单数据、上传文件、处理Cookies、使用代理等。它还支持SSL证书验证、连接超时设置、会话对象复用等高级功能。

requests库的设计哲学是“HTTP for Humans”(人类的HTTP),意味着它的API设计尽量符合人类的直觉,让HTTP请求变得像喝水一样自然。

安装

安装命令:pip install requests

注意你需要在安装python虚拟环境下执行,没有python虚拟环境安装命令会报错,当然你也可以使用其他软件来执行,比如pycham、vscode等都可以(前提是你要配置好python环境才能正常运行)

步骤
1.requests的基本使用3步骤
  • 导入模块
  • 发送get请求, 获取响应:
  • 从响应中获取数据:
#导入请求库
import requests
#设置请求网址
response = requests.get('https://www.baidu.com/')
#获取响应数据
print(response.text)

response 常见属性

  • response.text :  响应体 str类型
  • response.ecoding : 二进制转换字符使用的编码
  • respones.content:  响应体 bytes类型

输出结果:

vscode编辑器输出结果

但是作者发现输出的结果包含了一些特殊的字符,ç¾åº¦ä¸ä¸ï¼äå°è´´å»å½这些字符实际上是UTF-8编码的中文字符,由于在命令提示符中没有正确显示,所以看起来像是乱码。

2.查看所使用编码

如果要想知道自已所使用的是什么编码,直接添加如下

# 导入请求库
import requests

# 设置请求网址
response = requests.get("https://www.baidu.com/") 

# 输出信息
print(response.text)

# 获取编码
print(response.encoding)

输出结果如下:

就可以看到圈红色的就是所使用的编码ISO-8859-1

小提示:

ISO-8859-1,也称为Latin-1,是一种单字节字符集编码,它是为了表示西欧语言中的大部分字符而设计的。这种编码标准是国际标准化组织(ISO)1987年制定的,它是ISO 8859系列字符集编码中的第一个成员。

ISO-8859-1编码可以表示256个不同的字符,包括英文字母(大写和小写)、数字、标点符号以及一些特殊符号。此外,它还包括西欧语言中的特殊字符,如法语的ç、é、è、ê、ë,德语的ä、ö、ü,以及西班牙语的ñ等。

在计算机和网络技术中,ISO-8859-1曾经被广泛用作默认的字符编码,特别是在早期的互联网和电子邮件系统中。然而,随着多语言互联网内容的增长,这种编码逐渐被更通用的Unicode编码(如UTF-8)所取代,因为Unicode能够表示世界上大多数语言的字符,而ISO-8859-1仅限于西欧语言。

HTML文档中,可以通过<meta charset="ISO-8859-1">标签来指定使用ISO-8859-1字符集。在HTTP头部信息中,也可以通过Content-Type字段来指定字符编码,例如:Content-Type: text/html; charset=ISO-8859-1

3.设置编码

要想把我们的所获取的乱码变为中文字符,只需要设置编码为UTF-8即可,代码如下

# 导入请求库
import requests
# 设置请求网址
response = requests.get('https://www.baidu.com/') 
# 设置编码
response.encoding = 'utf8'
# 输出信息
print(response.text)

输出结果:

上图结果可知乱码变为中文,是不很简单啊,哈哈。

除了设置编码,还有其他使用技巧,比如代码如下

# 打印响应的二进制数据
print(response.content)

# 把二进制数据转换字符串
print(response.content.decode())

这两个代码可以单独使用或者组合使用,全看个人使用意愿,但最终目的是把不认识的字转换为我们能认识的字就可以了。

二、认识requests请求方法

这次我们来认识以下requests请求库的主要七个方法,如下:

requsts.requst() - > 构造一个请求,最基本的方法,是下面方法的支撑
requsts.get() - >获取网页,对应HTTP中的GET方法
requsts.post() - > 向网页提交信息,对应HTTP中的POST方法
requsts.head() - > 获取html网页的头信息,对应HTTP中的HEAD方法
requsts.put() - > 向html提交put方法,对应HTTP中的PUT方法
requsts.patch() - > 向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法
requsts.delete() - > 向html提交删除请求,对应HTTP中的DELETE方法

这次我们来简单的学会如何使用get方法和post方法

GET请求
简介
  • 用途:GET方法主要用于从服务器请求数据。可用于读取操作,并且结果会被显示给用户,如浏览网页。
  • 参数传递:GET方法的参数通过URL传递,通常以键值对的形式附加在URL之后。例如:http://example.com/index.php?name=value&anothername=value2
  • 安全性:由于GET请求的参数在URL中可见,因此不适合传输敏感信息,如密码或个人信息。
  • 缓存:GET请求的结果可以被浏览器缓存,也可以被书签保存。
  • 数据量限制:GET方法由于参数在URL中传递,因此对传输的数据量有限制(URL长度限制)。
基本语法
#导入请求库
import requests
#发送GET请求
r = requests.get('http://httpbin.org/get')
#打印响应内容
print(r.text)

提示

r : 是一个Response对象,一个包含服务器资源的对象
get(url) : 是一个Request对象,构造一个向服务器请求资源的Request。

上述代码是先导入请求库,然后构建简单的get请求方法,设置请求目标网址,最后输出响应信息的一个简单流程。

输出结果

可以看到我们成功发送get请求,返回结果包含有请求头,URL,IP等信息。

下面我们来解释代码各行意思,相信你会了解代码的意图

{
  "args": {}, #空值,表示在GET请求中没有包含任何查询字符串参数。
   #请求头headers包含的列出内容
  "headers": {
    "Accept": "*/*", #指示客户端可以处理的MIME类型
    "Accept-Encoding": "gzip, deflate", #指示客户端可以接受的内容编码格式
    "Host": "httpbin.org", #指示服务器正在访问的主机名
    "User-Agent": "python-requests/2.31.0", #包含了发出请求的用户代理的信息
    "X-Amzn-Trace-Id": "Root=1-661cb1d9-5734386062c81b176d2d6f2b" #用于AWS X-Ray跟踪的请求ID
  },
  "origin": "112.224.144.133", #表示发出请求的客户端的IP地址
  "url": "http://httpbin.org/get" #表示请求的URL
}

根据上述简单的案例我想我们能够写出一个简单get请求方法,并且能读懂代码的意思,接下来我们在深入一下怎么使用带参数的get请求传递参数

带参数的GET请求的格式

http://example.com/resource?param1=value1&param2=value2&param3=value3
  • http://example.com/resource 是资源的URL。
  • param1=value1&param2=value2&param3=value3 是查询字符串,包含了三个参数。
  • param1param2param3 是参数的名称(键)。
  • value1value2value3 是与参数名称相对应的值。

对于GET的请求如果我们想要添加多余的信息,一般需要在URL后面拼接,用一个【  ?】分割,参数传递过来后再用【 & 】的符号分割即可。例如我想要添加两个参数,其中name是China,age是5000,然后来构造这个请求连接,那这样的话就可以写为

r = requests.get('http://httpbin.org/get?name=China&age=5000')

0k,这行代码我们构造完毕,接下来我们再使用params这个用来传递参数,方便我们添加代码,一目了然。

提醒:构造好的代码理论上可以直接执行,但是一般情况下,此信息数据会用字典来存储。

代码如下:

import requests
# 设置参数
data = {
    'name':'China',
    'age':5000
}
# url拼接
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)

输出结果:

好了上述代码我们已经学会如何使用GET请求,也学会了如何构造参数请求的方式和传递参数。

POST请求
简介
  • 用途:POST方法主要用于向服务器提交数据,以创建或更新资源。可用于产生副作用的操作,如表单提交。
  • 参数传递:POST方法的参数在请求体中传递,不会显示在URL中。这使得POST方法可以传输更大量的数据。
  • 安全性:POST方法相对GET方法来说更安全,因为参数不会在URL中暴露。
  • 缓存:POST请求的结果通常不会被浏览器缓存,也不能被书签保存。
  • 数据量限制:POST方法没有数据量限制,理论上可以传输更大量的数据,但实际上可能受到服务器配置或HTTP库的限制。
基本语法
# 导入请求库
import requests

# 发送请求
res = requests.post('http://www.httpbin.org/post',data={'username':'China','password':5000})

# text 接收返回内容
print(res.text)

注意哈,post方法用于提交数据,跟get方法不同

输出结果

提示:res作为变量名代表“response”的缩写,这是一个广泛接受的做法,用于表示HTTP请求的响应对象。当然,您也可以使用其他变量名,如responser

POST请求的语法格式通常遵循以下结构:

POST /path/to/resource HTTP/1.1 #post请求方式以及请求路径和协议版本
Host: www.example.com #指定IP地址
Content-Type: application/x-www-form-urlencoded  #请求体的媒体类型
Content-Length: [length]  #请求体的长度
[key1=value1&key2=value2] #请求体的内容

这个post请求参数的语法格式我们一般不需要太重视(按实际需要),因为这是基于HTTP协议的原始请求格式,无需手动构造请求函数,高级的HTTP客户端库(如Python的requests库)会帮助我们处理这些细节。

好了,今日分享到此一游,通过这次学习我们可以学会如何通过安装和使用requests请求库以及能够编写基本的请求函数代码,同时也能够认识post和get两个不同的请求方法

点个关注不迷路,期待你的肯定🎁❤️💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot入门(16):让你的API文档更亮眼:Spring Boot与Swagger-UI完美整合!

1. 前言 在实际开发过程中&#xff0c;我们经常需要编写API文档来描述接口的调用方法、参数、返回值等信息。为了提高开发效率和维护便利性&#xff0c;Swagger-UI成为了API文档自动生成的一种流行方案。本文将介绍如何利用Spring Boot和Swagger-UI实现在线API文档。 2. 摘要…

应用编程之进程(三-通信篇)

所谓进程间通信指的是系统中两个进程之间的通信&#xff0c;不同的进程都在各自的地址空间中、相互独立、隔离&#xff0c;所以它们是处在于不同的地址空间中&#xff0c;因此相互通信比较难&#xff0c;Linux 内核提供了多种进程间通信的机制。 大部分的程序是不要考虑进程间…

unity学习(86)——细节优化

东西已经做出来了&#xff0c;现在需要的是优化&#xff0c;说得简单&#xff0c;做起来难。 1.122包的优化&#xff0c;避免重复创建&#xff01; 2.为何会出现一边动&#xff0c;一边不动的情况。重复登录后依旧是unity可以看到移动&#xff0c;但是exe那边看不到移动&#…

NAT基本配置

配置IP完成及缺省的路由如下&#xff1b; 此时R1pingISP是ping不通的&#xff0c;因为缺省是可以将数据传给R3&#xff0c;但是R3传不回去&#xff0c;知道目标IP地址但因其是私有内部IP&#xff0c;而自己的是公有IP&#xff0c;所以传不过去&#xff0c;此时就需要R2这个边界…

Linux 基于 TCP 协议的简单服务器-客户端应用

目录 一、相关函数 1、listen() 2、accept() 3、connect() 4、两种IP地址转换方式 5、TCP和UDP数据发送和接收函数对比 5、log.hpp自定义记录日志 二、udp_server.hpp单进程版本 三、tcp_server.cc 四、Telnet客户端&#xff08;代替tcp_client.cc&#xff09; 五…

TorchEEG文档_学习笔记1【代码详解】

文章目录 一、用户文档1.安装Pytorch2.安装TorchEEG3.安装与图算法的插件 二、教程1.使用TorchEEG完成深度学习工作流程2datasets模块3.transforms模块4.models模块5.trainer模块6.使用Vanilla PyTorch训练模型 一、用户文档 1.安装Pytorch TorchEEG依赖于PyTorch,根据系统、…

PTA L2-047 锦标赛

题目 解析 把每一场比赛看作满二叉树的一个节点&#xff0c;父节点递归遍历子节点的结果&#xff0c;进行试填。 代码 #include <bits/stdc.h>using i64 long long;struct Node {int win, lose; };void solve() {int k;std::cin >> k;int siz (1 << k);…

常见UI组件(二)

一、文本输入 1.1 概述 TextInput为文本输入组件&#xff0c;用于接收用户输入的文本内容 1.2 参数 Entry Component struct Index {build() {Column({space : 50}) {TextInput({placeholder:请输入用户名}).width(70%)TextInput({text:当前内容}).width(70%)}.width(100%).…

基于springboot+vue+Mysql的广场舞团管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Java | Leetcode Java题解之第38题外观数列

题目&#xff1a; 题解&#xff1a; class Solution {public String countAndSay(int n) {String[] arr {"","1","11","21","1211","111221","312211","13112221","1113213211",…

六、项目发布 -- 4. 电子书详情页API开发、电子书列表API开发

电子书详情页API的编写 同理如下app.get中路由、回调&#xff1b;回调中要连接数据库、接收前端传过来的值、到数据库中做查询&#xff0c;然后回调&#xff08;如果回调失败返回什么JSON&#xff0c;如果回调成功返回什么JSON&#xff09;&#xff1b;最后千万别忘记了关闭数…

面试:java中常见的锁

文章目录 概述并发编程三大特性java中常见的锁synchronized关键字&#xff08;隐式锁&#xff09;ReentrantLock 类ReadWriteLock 接口StampedLock 类 小结 概述 在Java中&#xff0c;锁是用于控制多个线程对共享资源的访问的一种机制。它有两个主要作用&#xff1a; 保证线程…

Pyqt5中设置matplotlib绘图区背景透明

Pyqt5中设置matplotlib绘图区背景透明 一、前言 最近组里接了学校的某项目&#xff0c;作者是团队里面负责做前端展示的&#xff0c;但是说实话&#xff0c;感觉QT做前端展示真不是很方便&#xff0c;开发过程中遇到不少棘手的问题。 其中一个卡了我一段时间的是界面画图表时…

ASP.NET基于Web的招投标系统的设计与实现

摘 要 招标拍卖的历史悠久&#xff0c;在近两千年的发展历程中&#xff0c;人们对拍卖的理论和技术做了大量的探讨。随着计算机网络技术的迅猛发展和日益成熟&#xff0c;为了提高招投标及采购工作的效率&#xff0c;为廉政建设和防止腐败提供技术保障&#xff0c;传统的拍…

计算机科学与导论 第十六章 安全

文章预览&#xff1a; 16.1引言16.1.1 安全目标16.1.2 攻击 16.2机密性16.2.1 对称密钥密码术16.2.2 非对称密钥密码术 16.1引言 为了安全&#xff0c;信息需要避开未授权的使用(机密性),保护信息不受到未授权的篡改(完整性)&#xff0c;并且对于得到授权的实体来说是需要时可…

PSAvatar:一种基于点的可变形形状模型,用于3D高斯溅射的实时头部化身创建

PSAvatar: A Point-based Morphable Shape Model for Real-Time Head Avatar Creation with 3D Gaussian Splatting PSAvatar&#xff1a;一种基于点的可变形形状模型&#xff0c;用于3D高斯溅射的实时头部化身创建 Zhongyuan Zhao1,2, Zhenyu Bao1,2, Qing Li1, Guoping Qiu3,…

OpenWrt One/AP-24.XY 开源路由器发布,OpenWRT与Banana Pi社区合作

OpenWrt One/AP-24.XY 开源路由器 2024 年&#xff0c;OpenWrt 项目将迎来20 周年&#xff01;OpenWrt 开源社区官方通过推出社区自己的第一个完全上游支持的硬件设计来庆祝这一周年纪念日。并与联发科&#xff0c;Banana Pi开源社区紧密合作&#xff0c;共同完成硬件的设计与…

运行django

确保app被注册 urls.py中编写url 视图对应关系 命令行启动 python manage.py runserver

图数据库Neo4J入门——Neo4J下载安装+Cypher基本操作+《西游记》人物关系图实例

这里写目录标题 一、效果图二、环境准备三、数据库设计3.1 人物节点设计3.2 关系设计 四、操作步骤4.1 下载、安装、启动Neo4J服务4.1.1 配置Neo4J环境变量4.1.2 启动Neo4J服务器4.1.3 启动Ne04J客户端 4.2 创建节点4.3 创建关系&#xff08;从已有节点创建关系&#xff09;4.4…

esp32 rst:0xf (BROWNOUT_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)

供电不足导致的 1、第1次出现 电脑usb电压不够&#xff0c;只有3.8V&#xff0c;给esp32s3供电&#xff0c;然后esp32带的模块太多&#xff0c;运行启动就一直报错 2、第2次出现 esp32带的模块单独电池供电&#xff0c;然后一运行MAX98357播放声音就重启 然后换模块单独充电…