网络请求与数据解析

news2024/10/5 12:49:27

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()

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

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

相关文章

Jenkins插件Parameterized Scheduler用法

Jenkins定时触发构建的同时设定参数。可以根据不同的定时构建器设置不同参数或环境变量的值。可以设置多个参数。并结合when控制stage流程的执行。结合when和triggeredBy区分定时构建的stage和手动执行的stage。 目录 什么是Parameterized Scheduler?如何配置实现呢…

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

需要准备材料:Origin、PL Decay数据txt文件 首先打开Origin画图软件 导入数据,按照下图箭头操作直接导入 双击你要导入的PL Decay的txt数据文件,然后点OK 继续点OK 数据导入后首先删除最大光子数之前的无效数据,分析的时候用…

react中的useEffect的使用

目录 React的useEffect深度解析与实战应用 一、useEffect的基本使用 二、useEffect的依赖项数组 三、避免无限循环 四、使用清空函数进行清理 React的useEffect深度解析与实战应用 React Hooks 是 React 16.8 版本引入的新特性,它允许我们在不编写 class 的情况…

AHU 汇编 实验二

一、实验名称:实验二 不同寻址方式的灵活运用 二、实验内容:定义数组a[6],用多种寻址方式访问对应元素,实现(a[0]a[1])*(a[2]-a[3])/a[4],将结果保存在内存a[5]中,用debug查询结果。 实验过程&a…

盘点 gma 中为 栅格数据 设计的切片操作

数据切片是 Python 中非常实用的方法,Numpy、Pandas 等第三方库的切片操作为数据处理提供了不少便利。如果能对栅格/矢量数据进行切片,那会使地理数据处理也变得方便和快捷。 基于此,自 gma 2.0.6.10 开始,gma 针对 打开的栅格数据…

【使用postman测试python接口】

打开python服务 设置postman如下,并发送: postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果: python如下: from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…

酷开科技智慧AI助力酷开系统千屏千面

每台智能电视都有一个专属的操作系统,而酷开系统作为一款基于人工智能技术的智能电视操作系统,深受大众喜爱,其最大的特点就是“千屏千面”。这意味着每一位消费者在使用酷开系统时,通过酷开科技的智慧AI,都能根据自己…

SpringSecurity原理简述

文章目录 0. 简介1. 快速入门1.1 准备工作1.2 引入SpringSecurity 2. 认证2.1 登陆校验流程2.2 原理初探2.2.1 SpringSecurity完整流程2.2.2 认证流程详解 2.3 解决问题2.3.1 思路分析2.3.2 准备工作2.3.3 实现2.3.3.1 数据库校验用户准备工作核心代码实现 2.3.3.2 密码加密存储…

Java this 关键字

**1.上节课学习了Java对象的定义和使用,我们知道了对象是存在堆内存中的,Java要求程序员不能直接操作堆内存,因此出现了引用的概念。引用的实质是一个存放对象地址的局部变量。 定义一个对象的语法: **Student s1 new Student();…

1.Spring核心功能梳理

概述 本篇旨在整体的梳理一下Spring的核心功能,让我们对Spring的整体印象更加具体深刻,为接下来的Spring学习打下基础。 本片主体内容如下: Bean的生命周期依赖注入的实现Bean初始化原理推断构造方法原理AOP的实现这里要说明一下,我们这里说到的Spring,一般指的是Spring F…

Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言 最近本地启动以前docker安装的rocketmq发现报错了,因为是从老mac迁移过来的,发现支持的芯片还是amd的,于是重新在docker下安装rocketmq,并记录下步骤,方便大家后续参考。 1. 步骤 1、先下载项目源码 git c…

3.基础算法之搜索与图论

1.深度优先搜索 深度优先搜索(DFS,Depth First Search)是一种用于遍历或搜索树或图的算法。它将当前状态按照一定的规则顺序,先拓展一步得到一个新状态,再对这个新状态递归拓展下去。如果无法拓展,则退回…

【手撸IM】消息ID设计与实现

【手撸IM】专题由来:之前利用业余空闲时间写一个Java版Akka-Rpc,并且基于它写了一个分布式高性能文件服务,从反馈上来看,还是得到了一定的关注,甚至部分同学真的基于此直接抄作业和二开了。因此有了再进一步去手撸一个…

收益率16.6%!超越ChatGPT的股票预测模型来了,还能给出合理解释

股市变换莫测,任何一点风吹草动都可能影响股票的走势,面对这种不确定性,投资者们常常感到无所适从。 于是研究者们盯上了如今大火的大模型技术,试图通过高效地处理和分析海量的股市数据,挖掘出其中的隐藏规律和趋势&am…

使用ffmpeg提取视频中的音频并保存为单声道wav

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 $ ffmpeg -i C0439.MP4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable…

华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

网络安全之渗透实战学习

前言 本次渗透以SMB共享之SCF文件攻击为突破点,利用burp编码爆破Basic Authorization认证、smb连接的多种方法、windows用户的NTLM值破解方法、evil-winrm的运用、windows主机信息收集工具、msf运行powershell脚本、远程运行powershell脚本、PrintNightmare漏洞提权…

内存抖动导致shared pool资源征用分析

业务hang住,后台查看事件都是“latch: shared pool” 根据堵塞的blocking_session检查sid为1873的会话 发现都是MMAN进程堵塞,我们都知道Oracle的MMAN进程(Memory Manager Process,内存管理进程)会根据系统负载的变化和…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题⑤

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题⑤ 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…