网络请求与数据解析

urllib是Python自带的标准库中用于网络请求的库 ,无需安装,直接引用即可。通常用于爬虫开发、API(应用程序编程接口)数据获取和测试。

urllib库的几个模块:

  • urllib.request :用于打开和读取URL
  • urllib.error:包含提出的例外(异常)urllib.request
  • urllib.parse:用于解析URL
  • urllib.robotparser:用于解析robots.txt文件
import urllib.request

# 请求 URL
response = urllib.request.urlopen('http://www.example.com')

# 获取响应内容
content = response.read()

# 打印响应内容前 100 个字符
print(content[:100])

 urllib.parse 模块可以用来解析 URL:

from urllib.parse import urlparse, parse_qs

# 解析 URL
url = 'http://www.example.com/path?name=John&age=30'
parsed_url = urlparse(url)

# 获取 URL 的各个组成部分
scheme = parsed_url.scheme
netloc = parsed_url.netloc
path = parsed_url.path
params = parsed_url.params
query = parsed_url.query
fragment = parsed_url.fragment

# 解析查询字符串
query_dict = parse_qs(query)

print(f"Scheme: {scheme}")
print(f"Netloc: {netloc}")
print(f"Path: {path}")
print(f"Params: {params}")
print(f"Query: {query}")
print(f"Fragment: {fragment}")
print(f"Query dictionary: {query_dict}")

发送请求 

  • urllib.request库 模拟浏览器发起一个HTTP请求,并获取请求响应结果。
  • urllib.request.urlopen  urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)

data:默认值为None,urllib判断参数data是否为None从而区分请求方式。 

urlopen函数返回的结果是一个http.client.HTTPResponse对象 

写一个爬虫程序:

  • 导入 urllib.request
  • 打开url
  • 读取响应内容  

IP代理

IP代理:假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理。

IP代理的分类 :

  1.  透明代理:目标网站知道你使用了代理且知道你的源IP地址
  2. 匿名代理:匿名程序比较低,也就是网站知道你使用了代理,但是并不知道你的源IP地址
  3. 高匿代理:最保险的方式,目录网站既不知道你使用了代理更不知道你的源IP 

使用Cookie 

为什么需要使用Cookie 解决http的无状态性 

  • 实例化MozillaCookieJar (保存cookie)
  • 创建 handler对象(cookie的处理器)
  • 创建opener对象
  • 打开网页(发送请求获取响应)
  • 保存cookie文件 

异常处理主要用到两大类

urllib.error.URLError :用于捕获由urllib.request产生的异常,使用reason属性返回错误原因。

urllib.error.HTTPError :用于处理HTTP与HTTPS请求的错误,它有三个属性:

  • code:请求返回的状态码
  • reason:返回错误的原因
  • headers:请求返回的响应头信息

requests库 

Requests 是Python一个很实用的HTTP客户端,完全满足如今网络爬虫的需求

requests库的安装

  • windows:pip install requests
  • Mac : pip3 install requests
  • Linux:sudo pip install requests 

方法

描述

requests.request(url)

构造一个请求,支持以下各种方法

requests.get()

发送Get请求

requests.post()

发送Post请求

requests.head()

获取HTML的头部信息

requests.put()

发送Put请求

requests.patch()

提交局部修改的请求

requests.delete()

提交删除请求

语法结构:     requests.get(url, params=None) 

  •  url:需要爬取的网站的网址
  • params:请求参数

 

 post请求

requests.post( url, data=None, json=None)

  • url:需要爬取的网站的网址
  • data:请求数据
  • json :json格式的数据

POST请求和GET请求区别 

  1. 数据传输方式:GET请求通常将参数包含在URL中,而POST请求则通过request body传递参数。这意味着GET请求的参数直接附加在URL之后,而POST请求的参数则放在请求体中。
  2. 安全性:由于GET请求的参数直接暴露在URL中,所以隐私性和安全性较差。POST请求的参数不在URL中,因此相对更加安全。
  3. 数据长度限制:GET请求的数据长度受到URL长度的限制,不同的浏览器和服务器对URL长度有不同的限制,一般限制在2~8K之间,更常见的是1K以内。POST请求没有长度限制,因为请求数据是放在body中的。
  4. 缓存和历史记录:GET请求可以被缓存,而POST请求不会被缓存。GET请求会被保存在浏览器的历史记录中,可以被收藏为书签,但POST请求不会。
  5. 影响服务器状态:GET请求通常用于获取信息,不应对服务器状态产生影响。POST请求通常用于提交数据,可能会改变服务器上的状态。
  6. 浏览器兼容性:GET请求可以直接在浏览器地址栏中输入URL来访问,而POST请求通常需要通过表单提交或其他客户端代码来实现。
  7. 重试和刷新:GET请求可以安全地进行重试和刷新,因为它只是获取数据。POST请求在刷新时可能会重复提交数据,导致多次执行相同的操作。

 session发请求

  • 获取session对象:requests.session()
  • session对象.post() 发送post请求  
import requests

# 创建一个Session对象
session = requests.Session()

# 设置请求头
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'}

# 发送GET请求
response = session.get('https://www.example.com', headers=headers)

# 打印响应内容
print(response.text)

# 关闭Session
session.close()

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

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

相关文章

大模型相关算法模型学习

对Transformer中Add&Norm层的理解-CSDN博客 GPT模型总结【模型结构及计算过程_详细说明】_gpt结构-CSDN博客 推荐30个以上比较好的中文nlp意图识别模型源码?-CSDN博客 Few-shot learning(少样本学习)入门 - 知乎 (zhihu.com) 零次学习…

程序人生 - 爬虫者,教育也!

作为一个站长,你是不是对爬虫不胜其烦?爬虫天天来爬,速度又快,频率又高,服务器的大量资源被白白浪费。 看这篇文章的你有福了,我们今天一起来报复一下爬虫,直接把爬虫的服务器给干死机。 本文有…

Linux常见指令总结

ls:显示当前目录下文件列表 常用的命令行参数: -l 显示更多的文件属性 -a 显示所有的文件/目录(包括隐藏的) -d 只显示目录 ps:参数可以叠加使用。 例如:ls -la 显示所有文件…

基于 Jenkins 搭建一套 CI/CD 系统

一、CI/CD环境介绍 本次要实现如下效果,开发人员完成功能开发并提交代码到gitlab仓库,jenkins自动完成拉取代码、编译构建、代码扫描(sonarqube)、打包,再自动化完成部署到Tomcat服务器提供访问。 环境准备三台Centos…

初窥机器学习

人工智能 近几年来,人工智能(AI)已成为家喻户晓的术语,我们在游戏、电影(还记得J.A.R.V.I.S吗?)和书籍中经常看到它的提及和描绘,但人工智能究竟是什么呢? 人工智能简单…

远程同声传译如何实现?哪里提供专业的远程同声传译?

远程同传声传译,即线上同传翻译,是指翻译员通过非现场的网络方式进行的同声传译(实时翻译)。远程同声传译的实现依赖于一系列先进的技术手段和高效的协作流程。这一服务模式的出现,不仅打破了传统同声传译的地域限制,还为全球范围…

2024上半年软考初级《程序员》报名考试全流程梳理

​2024年软考程序员考试报名时间节点: 报名时间:上半年3月18日到4月15日,下半年8月19日到9月15日(各地区报名时间不同,具体日期见官方通告) 准考证打印时间:上半年5月20日起,下半年…

HarmonyOS NEXT应用开发之使用AKI轻松实现跨语言调用

介绍 针对JS与C/C跨语言访问场景,NAPI使用比较繁琐。而AKI提供了极简语法糖使用方式,一行代码完成JS与C/C的无障碍跨语言互调,使用方便。本示例将介绍使用AKI编写C跨线程调用JS函数场景。通过调用C全局函数,创建子线程来调用JS函…

项目实战-tpshop商城项目

项目实战-tpshop商城项目 环境部署准备软件工具准备远程连接测试远程连接测试-查看虚拟机IP地址远程连接测试-检测本机与虚拟机是否连通远程连接测试-通过远程工具连接linux服务器 常见问题处理 环境部署项目技术架构介绍部署tpshop项目-tpshop验证数据库验证用户信息表熟悉商品…

【国产】API接口管理平台的产品设计与搭建讲解

【国产接口管理平台】PhalApi Pro (π框架专业版) PhalApi Pro (发音:π框架专业版),是一款国产企业级API接口管理平台,可以零代码、快速搭建API接口开发平台、接口开放平台、接口管理平台。基于PhalApi开源接口开发框架,通过低代…

可视化表单流程编辑器为啥好用?

想要提升办公率、提高数据资源的利用率,可以采用可视化表单流程编辑器的优势特点,实现心中愿望。伴随着社会的进步和发展,提质增效的办公效果一直都是很多职场办公团队的发展需求,作为低代码技术平台服务商,流辰信息团…

MySQL8.0安装教程+使用Navicat远程连接

MySQL8.0安装教程使用Navicat远程连接 版本:MySQL8.0.28 环境:Windows11 1.MySQL下载 进入官网https://www.mysql.com/进行下载: 2.安装MySQL 下载好后,点击运行程序开始安装,安装步骤如下: 以下步骤验…

MSigDB数据库 | 富集分析需要的基因集该去哪里找?如何选择适合自己数据的基因集?

富集分析可以说是我们的老帮手了!进行富集分析,就不能不提基因集,那基因集我们该去哪里找呢?我们又该如何选择适合自己数据的基因集呢?咱们今天就来浅浅唠一唠! 最常见的操作就是去MSigDB数据库找现成的基因…

2024-3-11-C++作业

1>试编程 要求&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 源代码: #include <iostream>using namespace std;int main() {string s;cout << "请输入字符串&#xff1a;"…

RESTful接口规范参考

介绍 REST&#xff08;Representational State Transfe&#xff09;&#xff0c;一种架构设计风格&#xff0c;而不是强制标准&#xff0c;主要用于客户端与服务端接口规范&#xff1b;在现代的软件开发中&#xff0c;RESTful API已经成为应用程序之间通信的重要桥梁&#xff…

淘宝扭蛋机小程序开发:惊喜与趣味,尽在一扭之间

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级、便捷的应用形式&#xff0c;受到了广大用户的青睐。为了满足淘宝用户对新鲜、有趣购物体验的需求&#xff0c;我们倾力打造了淘宝扭蛋机小程序&#xff0c;为用户带来全新的购物乐趣和惊喜体验。 淘宝扭蛋机小程序…

【JavaScript标准内置对象】Math的介绍。

简言 js与其他高级语言一样&#xff0c;也可以进行数学运算。 Math 是一个内置对象&#xff0c;它拥有一些数学常数属性和数学函数方法。Math 不是一个函数对象。 Math 用于 Number 类型。它不支持 BigInt。 Math 与其他全局对象不同的是&#xff0c;Math 不是一个构造器。Ma…

CANalyzer使用_02 测试环境搭建

本文主要介绍CANalyzer测试环境的搭建。主要是硬件方面&#xff0c;软件方面要跟着进行配合。根据ISO 11898标准&#xff0c;如果是高速&#xff0c;记得要加120Ω的终端电阻。 1 两个CAN短接 如下图所示&#xff0c;用两端都是DB9的线将VN1630A的CH1和CH2的端口短接。VN1630…

SpringSecurity 快速入门

文章目录 1. 认证授权概述1.1 认证授权概念1.1.1 认证1.1.2 授权 1.2 权限数据模型1.3 RBAC权限模型1.3.1 介绍1.3.2 基于角色访问控制1.3.3 基于资源访问控制 1.4 常见认证方式1.4.1 Cookie-Session1.4.2 jwt令牌无状态认证 1.5 技术实现 2. SpringSecurity入门2.1 介绍2.2 入…

人数统计显示屏对粉尘车间人员进出管理

2022年1月20日&#xff0c;江苏省常州市某公司的粉尘车间发生了一起严重的粉尘爆炸事故&#xff0c;这一悲剧造成了8人死亡和8人受伤。这起事故引起了社会各界的广泛关注&#xff0c;也再次凸显了工业安全管理的重要性。 据报道&#xff0c;这起粉尘爆炸事故发生在公司的粉尘车…