网络请求与数据解析

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.mzph.cn/news/739094.shtml

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

相关文章

羊大师揭秘羊奶滋养,养生的新黄金选择

羊大师揭秘羊奶滋养,养生的新黄金选择 羊奶,这个自古以来的天然营养佳品,近年来逐渐受到现代人的青睐,成为养生的新黄金选择。它以其独特的营养价值和滋养功效,为追求健康生活的我们提供了全新的养生视角。 羊奶的滋…

LeetCode # 1161. 最大层内元素和

1161. 最大层内元素和 题目 给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。 请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。…

Vue:自动按需导入element-plus图标

自动导入使用 unplugin-icons 和 unplugin-auto-import 从 iconify 中自动导入任何图标集。 完整vite.config.js参考模板 https://download.csdn.net/download/ruancexiaoming/88928539 动态导入图标参考 https://blog.csdn.net/ruancexiaoming/article/details/136568219 导入…

几个redis常用命令

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 ping:测试连接是否存活 例如:测试当前redis数据库是否存活 127.0.0.1:6379> ping #返回PONG&am…

python学习28

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

不会还有人判断字符是否为数字或字母还用Ascii吧

不会还有人判断字符是否为数字或字母还用Ascii吧 c > a && c < z) || (c > 0 && c < 9当然&#xff0c;也可也用&#xff0c;下面给大家分享几个方法快速判断。 Character.isLetter(ch) 判断ch是否为字母 Character.isDigit(ch) 判断ch是否为数字…

导入空管基础数据

1、首先将data.tar.gz解压到自定义目录中 注意&#xff1a;由于数据文件的压缩包比较大&#xff0c;解压过程可能会持续3~5分钟&#xff0c;请耐心等待。 [rootnode3 ~]# cd /opt/software/ [rootnode3 software]# tar -xzf data.tar.gz -C /opt/ 2、利用SQLyog或者其他数据库…

9、设计模式之组合模式(Composite)

一、什么是组合模式 组合模式也成为整体部分模式&#xff0c;是一种结构型设计模式。它将对象组合成树形的层次结构&#xff0c;用来表示“整体-部分”的关系。通过组合模式&#xff0c;我们可以使用相同的方式处理单个对象和多个对象组合。 二、角色组成 组件&#xff08;Com…

ROS机器人程序设计课程进度安排-2023-2024-2

进度安排由人工智能审核制定。 课程 教学进度表预期效果与课程内容详细描述 一、预期效果 此教学进度表旨在确保《ROS机器人程序设计》课程在2023&#xff5e;2024学年度第二学期内&#xff0c;按照预定的教学计划和进度&#xff0c;有序、高效地进行。通过本课程的教学&…

第二十一天-NumPy

目录 什么是NumPy NumPy使用 1.数组的创建 2.类型转换 3.赠删改查 4.数组运算 5.矩阵运算 什么是NumPy 1.NumPy操作的是多维数组&#xff0c;什么是纬度&#xff1f; NumPy使用 1. 安装 pip install numpy import numpy as np 2.官网&#xff1a; 中文官网&#xff1a…

蝙蝠避障:我生活中的一道光

盲人的世界&#xff0c;是无尽的黑暗。看不见光&#xff0c;看不见色彩&#xff0c;甚至看不见自己的手。但在这个黑暗的世界里&#xff0c;我找到了一个光明的出口&#xff1a;一款可以障碍物实时检测的名为蝙蝠避障的盲人软件。 这款软件就像是我的一双眼睛。它通过先进的激光…

Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

&#x1f4c1; 前情提要&#xff1a; Springboot 整合 Elasticsearch&#xff08;三&#xff09;&#xff1a;使用RestHighLevelClient操作ES ① 目录 一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介绍 1.1、全查询 & 分页 & 排序 1.2、单条件查询…

【linux线程(一)】什么是线程?怎样操作线程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 什么是线…

使用cmd命令运行java

1.普通项目(不带lib文件夹) 1.在桌面上建一个名为com的文件夹&#xff0c;在文件夹中用记事本写两个类文件&#xff0c;后缀改为.java。两个类文件的内容如下图所示&#xff1a; 2.使用javac命令编译主函数&#xff0c;命令行为javac TestMain.java。结果可以看到自动生成了两…

Pygame教程07:键盘常量+键盘事件的2种捕捉方式

------------★Pygame系列教程★------------ Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;draw方法绘制矩形、多边形、圆、椭圆、弧…

理论学习 BatchNorm2d

import torch import torch.nn as nn# With Learnable Parameters m nn.BatchNorm2d(100) # Without Learnable Parameters m nn.BatchNorm2d(100, affineFalse) input torch.randn(20, 100, 35, 45) output m(input)print(output) print(output.shape)这段代码展示了如何使…

2024蓝桥杯每日一题(二分)

一、第一题&#xff1a;教室 解题思路&#xff1a;二分差分 对天数进行二分&#xff0c;在ck函数中用差分方法优化多次区间累加。 【Python程序代码】 n,m map(int,input().split()) a [0] list(map(int,input().split())) d,s,t [0]*(m5),[0]*(m5),[0]*(m5) for…

你还可以通过“nrm”工具,来自由管理“npm”的镜像

你还可以通过“nrm”工具&#xff0c;来自由管理“npm”的镜像 nrm&#xff08;npm registry manager&#xff09;是npm的镜像管理工具&#xff0c;有时候国外的资源太慢&#xff0c;使用这个就可以快速地在npm源间切换。 1.安装nrm 在命令行执行命令&#xff0c;npm install…

Docker容器化技术(数据卷的管理)

数据卷 是一个可供容器使用的特殊目录&#xff0c;它将主机操作系统目录直接 映射进容器&#xff0c;类似于 Linux 中的 mount 行为 。 数据卷&#xff1a;可以提供很多有用的特性 数据卷可以在容器之间共事和重用&#xff0c;容器间传递数据将变得高效与方便&#xff1b;对数…

如何选择合适的IP代理,如何为网络爬虫设置代理

目录 前言 1. 代理类型的选择 2. 代理速度 3. 代理稳定性 4. 代理的匿名性 5. 代理的地理位置 总结 前言 在进行网络爬虫任务时&#xff0c;为了避免被目标网站封禁IP或限制访问频率&#xff0c;我们通常会使用代理来隐藏真实的IP地址。选择合适的IP代理对于爬虫的成功…