爬虫学习:基本网络请求库的使用

目录

一、urllib网络库

1.urlopen()方法

 2.request方法

二、requests网络请求库

1.主要方法

 2.requests.get()和requests.post()


一、urllib网络库

1.urlopen()方法

语法格式:

urlopen(url,data,timeout,cafile,capath,context)
# url:地址
# data:要提交的数据
# timeout:设置请求超时时间,超时就舍弃或者重新尝试
# cafile和capath:代表CA证书和CA证书的路径,如果使用https需要用到
# context:指定SSL设置,必须是ssl.SSLContext类型

案例:请求一个简单的网页源代码

import urllib.request
url="https://www.baidu.com/"
responds=urllib.request.urlopen(url)
# 返回一个结果
html=responds.read()
# 运用结果的read方法即可获取源码
print(html.decode('utf-8'))
# decode解码为utf-8,防止乱码

 结果:

但发现和我们通过f12获取的源码有所不同,原因是网站对headers内的User-Agent信息进行了验证,识别出是程序在访问(默认的User-Agent是python-urllib/版本号),所以对其进行了拦截。此时我们就需要对header进行伪装,伪装成浏览器上的header信息。

案例:设置请求超时

设置timeout参数的值即可。

import urllib.request
url="https://www.baidu.com/"
responds=urllib.request.urlopen(url,timeout='3')
# 返回一个结果
html=responds.read()
# 运用结果的read方法即可获取源码
print(html.decode('utf-8'))
# decode解码为utf-8,防止乱码

案例:使用data参数提交数据 

data是bytes字节流。

​
import urllib.request
url="https://httpbin.org/post"
# url后加post为POST方法
data=bytes(urllib.parse.urlencode({'word':'22222'}),encoding='utf-8')
# urllib.parse.urlencode这个方法在构建GET请求时非常有用,可以将参数编码为URL编码格式,方便附加到URL后面。
responds=urllib.request.urlopen(url,data=data)
# 返回一个结果
html=responds.read()
# 运用结果的read方法即可获取源码
print(html.decode('utf-8'))
# decode解码为utf-8,防止乱码

​

 2.request方法

语法格式:

urllib.request.Request(url,data,headers={},origin_req_host,unverifiable,method)
#     url:请求url
#     data:上传数据
#     headers:指定发起的HTTP请求的头部信息,此为字典,还可以add_header()添加
#     origin_req_host:请求方的host或ip地址
#     unverifiable:设置请求是否有权限,true为有,false为无.
#     method:发起HTTP请求方式,有GET,POST,DELETE,PUT等

 案例:伪装headers

常见的User-Agent示例:

Chrome:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3

Firefox:

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
import urllib.request
url="https://www.baidu.com/"
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
request=urllib.request.Request(url=url,headers=headers)
# 获得一个request对象
responds=urllib.request.urlopen(request)
# 使用对象返回一个结果
html=responds.read()
# 运用结果的read方法即可获取源码
print(html.decode('utf-8'))
# decode解码为utf-8,防止乱码

案例:通过data提交数据

import urllib.request
url="https://www.baidu.com/"
# url后加post为POST方法
data=bytes(urllib.parse.urlencode({'word':'22222'}),encoding='utf-8')
# urllib.parse.urlencode这个方法在构建GET请求时非常有用,可以将参数编码为URL编码格式,方便附加到URL后面。
request=urllib.request.Request(url=url,data=data,method='POST')
responds=urllib.request.urlopen(request)
# 返回一个结果
html=responds.read()
# 运用结果的read方法即可获取源码
print(html.decode('utf-8'))
# decode解码为utf-8,防止乱码

二、requests网络请求库

1.主要方法

常用方法:requests.get()和requests.post()方法。

方法解释
requests.request()构造一个请求,支持下面各种方法
requests.get()获取HTML的主要方法
requests.head()获取HTML头部信息的主要方法
requests.post()提交POST请求
requests.put()        提交PUT请求
requests.patch()提交局部修改方法
requests.delete()提交删除请求

 2.requests.get()和requests.post()

语法格式:

res = resquests.get(url,**kwargs)或res = resquests.post(url,**kwargs)

#     url:请求url。
#     **kwargs:其为以下参数可选。

参数名称描述
params

字典或字节序列,作为参数添加到URL中,使用这个参数可以方便的向服务器传参。

例:params = {'keyword': 'python', 'page': '1'}

则发送请求的URL为(数值插入为?部分)https://www.example.com/search?keyword=python&page=1w​​​​​​

data字典、字节序列或文件对象,向服务器提交资源或数据时候使用,与params区别是data提交的数据放在URL链接所指向的对应地方进行存储,而不放在URL链接里。一般在post方法里使用
jsonjson格式数据,它作为内容部分向服务器提交。
headers字典类型数据,设置发起HTTP请求的头字段。
cookies字典或CookieJar,指的是从HTTP中解析Cookie。
auth元组,用来支持HTTP认证功能。
files

字典,传输文件时候使用。

例:fs={'files':open('data.txt','rb'}

timeout设置超时时间。
proxies字典,用来设置访问代理服务器。
allow_redirects开关,设置是否允许库自动处理重定向,默认为true,允许返回响应结果,不允许则返回含重定向信息的响应对象。
stream开关,指是否对获取内容进行立即下载,默认为true。
verify开关,用于认证SSL证书,默认为True。
cert用于设置保存本地SSL证书路径。

请求发起后,会返回包含服务器资源的response对象,其包含了以下内容。

属性说明
status_code返回HTTP请求的状态码,若为200表示请求成功。
textHTTP响应内容的字符串形式,即返回页面内容。
encoding从HTTP Header中猜测响应内容编码方式。
apparent_encoding从内容中分析出的响应内容编码方式
contentHTTP响应内容的二进制形式。

案例:简单请求

import requests

header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res=requests.get("http://www.baidu.com",headers=header)
print(res.status_code)
print(res.encoding)
print(res.apparent_encoding)
print(res.text)

运行结果:

案例:data传递参数

这里表单文本输入框的id为text,data相当于设定了表单值。

import requests

header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
data={
    "text":"hello"
}
res=requests.post("http://8.134.81.188:8080/music/servlet.jsp",headers=header,data=data)
print(res.text)

运行结果:

返回响应体内容。

去后台可以发现写入成功。

案例:URL传数据

该方法相当于在浏览器地址栏输入以下内容。

http://8.134.81.188:8080/music/servlet.jsp?text=hello
import requests

header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
params={
    "text":"hello"
}
res=requests.get("http://8.134.81.188:8080/music/servlet.jsp",headers=header,params=params)
print(res.text)

 运行结果与前一个相同。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[华为OD]C卷 机场航班调度 ,XX市机场停放了多架飞机,每架飞机都有自己的航班号100

题目: XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385, CZ6678, SC6508 等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。 但是XX市机场只有一条起飞用跑道&am…

uniapp源码+计划任务 台股平台源码 新股申购 分类后台控制

台股平台源码集成了新股申购与折扣申购功能,结合了计划任务和UniApp源码,为用户提供了一个全面的股票交易解决方案。 经过初步测试,系统可正常运行。测试时没有配置计划任务和WebSocket 。有兴趣的自行研究。 本系统基于PHP 7.3版本开发&am…

【记录】Springboot项目集成docker实现一键部署

公司管理平台完成后,为了方便其他不懂开发的同事部署和测试,集成docker进行一键部署,也为后面自动化部署做准备。本文做个简单记录。 1、安装docker yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/cont…

maven插件:dockerfile-maven-plugin和docker-maven-plugin

Maven插件dockerfile-maven-plugin和docker-maven-plugin都是为Java开发人员提供了一种便捷的方式,通过Maven构建流程来自动化创建、管理和推送Docker镜像。虽然它们有着相似的目标,即集成Docker与Maven项目,但这两个插件在实现细节、功能侧重…

嵌入式全栈开发学习笔记---C语言笔试复习大全3

目录 笔试题3 笔试题4 笔试题5 上一篇介绍了数据类型的长度和数据范围,并且分别讲解了两个经典的笔试题,这一篇我们再来看三道非常经典的考数据类型长度、数据范围和数据类型转换的笔试题。 说明:我们学过单片机的一般都是有C语言基础的了…

Flask路由的使用

Flask 是一个轻量级的 Python Web 框架,其简洁的设计使得构建 Web 应用变得轻而易举。其中,路由是 Flask 中至关重要的一部分,它定义了 URL 与视图函数之间的映射关系,决定了用户请求的处理方式。在本文中,我们将深入探…

vue3项目引入VueQuill富文本编辑器(成功)及 quill-image-uploader 图像模块(未成功)

tip:重点解释都写在代码注释里了,方便理解,所以看起来比较密集 富文本基本使用 项目文件夹路径安装依赖 npm install vueup/vue-quilllatest --save 全局注册:main.js // main.js// 自己项目的一些配置(只放了主要…

【C语言】文件操作(万字解读超详细解析)

最好的时光,在路上;最好的生活,在别处。独自上路去看看这个世界,你终将与最好的自己相遇。💓💓💓 目录 • ✨说在前面 🍋知识点一:什么是文件? • 🌰1.程序…

【项目学习01_2024.05.01_Day03】

学习笔记 3.6 开发业务层3.6.1 创建数据字典表3.6.2 编写Service3.6.3 测试Service 3.7 接口测试3.7.1 接口完善3.7.2 Httpclient测试 3.8 前后端联调3.8.1 准备环境3.8.2 安装系统管理服务3.8.3 解决跨域问题解决跨域的方法:我们准备使用方案2解决跨域问题。在内容…

模方试用版水面修整,调整水岸线功能进程缓慢该怎么解决?

答:水面修整,第一个点选取准确的高程位置和水边,其他点就可以包含整个水面范围就行,可以绘制大一些。上图绘制区域没有包含到所有的水面,可以尝试下图的红线绘制区域。 模方是一款针对实景三维模型的冗余碎片、水面残缺…

使用Neo4j和Langchain创建知识图谱

使用Neo4j和Langchain创建知识图谱 知识图谱是组织和整合信息的强大工具。通过使用实体作为节点和关系作为边缘,它们提供了一种系统的知识表示方法。这种有条理的表示有利于简化查询、分析和推理,使知识图在搜索引擎、推荐系统、自然语言处理和人工智能…

Docker:centos7安装docker

官网:https://www.docker.com/官网 文档地址 - 确认centos7及其以上的版本 查看当前系统版本 cat /etc/redhat-release- 卸载旧版本 依照官网执行 - yum安装gcc相关 yum -y install gccyum -y install gcc-c- 安装需要的软件包 yum install -y yum-utils- 设置s…

Java 基础重点知识-(泛型、反射、注解、IO)

文章目录 什么是泛型? 泛型有什么用?泛型原理是什么? Java 反射什么是反射? 反射作用是什么?动态代理有几种实现方式? 有什么特点? Java 注解什么是注解, 作用是什么? Java I/O什么是序列化?Java 是怎么实现系列化的?常见的序列化协议有哪些?BIO/NIO/AIO 有什么区别…

可靠的Mac照片恢复解决方案

当您在搜索引擎搜索中输入“Mac照片恢复”时,您将获得数以万计的结果。有很多Mac照片恢复解决方案声称他们可以在Mac OS下恢复丢失的照片。但是,并非互联网上的所有Mac照片恢复解决方案都可以解决您的照片丢失问题。而且您不应该花太多时间寻找可靠的Mac…

数据库(MySQL)—— DQL语句(聚合,分组,排序,分页)

数据库(MySQL)—— DQL语句(聚合,分组,排序,分页) 聚合函数常见的聚合函数语法 分组查询语法 排序查询语法 分页查询语法 DQL的执行顺序 我们今天来继续学习MySQL的DQL语句的聚合和分组查询&…

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

名人说:一点浩然气,千里快哉风。—— 苏轼《水调歌头》 创作者:Code_流苏(CSDN) 目录 一、Python环境搭建二、PyCharm下载及安装三、解释器配置及项目测试四、PyCharm汉化五、背景图设置 很高兴你打开了这篇博客,如有疑问&#x…

Django后台项目开发实战七

为后台管理系统换风格 第七阶段 安装皮肤包 pip install django-grappelli 在 setting.py 注册 INSTALLED_APPS [grappelli,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.stat…

LLM应用:工作流workflow创建自定义模版使用

参考: https://www.coze.cn/ 本案例是在coze平台上操作的,也有其他工具支持工作流的创建例如dify;也例如图像生成的comfyui工作流工具 创建自定义模版 可以根据自己需求创建自己的工作流工具;本文案例是创建一个联网搜索的LLM应用: 创建工作流页面: https://www.coze.c…

RTMP 直播推流 Demo(二)—— 音频推流与视频推流

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

Linux开发板 FTP 服务器移植与搭建

VSFTPD(Very Secure FTP Daemon)是一个安全、稳定且快速的FTP服务器软件,广泛用于Unix和Linux操作系统。它以其轻量级、高效和易于配置而受到赞誉。VSFTPD不仅支持标准的FTP命令和操作,还提供了额外的安全特性,如匿名F…
最新文章