05.爬虫---urllib与requests请求实战(GET)

05.urllib与Requests请求实战GET

    • 1.Urllib模块
    • 2.Requests模块
    • 3.对比
    • 4.实战

GET请求
Python中的GET请求也是HTTP协议中的一种请求方法,用于向服务器请求数据。与POST请求不同,GET请求将数据以查询字符串的形式附加在URL后面,而不是封装在请求体中。通常情况下,GET请求用于向服务器请求某个资源,比如获取网页、图片、视频等。

1.Urllib模块

Urllib官方文档 https://docs.python.org/3/library/urllib.request.html
urllib是Python的标准库,用于发送HTTP请求和处理响应。它提供了urlopenRequest等函数和类来与网络资源进行交互。urllib能够处理的基本请求包括GET、POST、PUT、DELETE等,同时也支持设置请求头、请求体、处理cookies等高级功能,但其API相对较为底层,使用起来比较繁琐。urllib在处理请求时,如果发生错误,可以通过urllib.error模块来捕获异常。
内置4个模块:

  • request: http的请求模块,传入UPL及额外的参数,就模拟发送请求
  • error 异常处理模块,确保程序不会意外终止
  • parse : 一个工具模块,提供了许多URL处理方法。
  • robotparser : 用来识别robots.txt文件,判断那些网站可以爬

使用示例:
urllib 是 python 内置模块 无需安装,直接引用即可:

import urllib.request# 发送GET请求
response = urllib.request.urlopen('https://www.baidu.com')
data = response.read()
print(data.decode('utf-8'))

2.Requests模块

Requests 官方文档 https://docs.python-requests.org/

Requests是一个第三方库,提供了一个更简洁、易用的API来发送HTTP请求。它内置了丰富功能,如会话对象、请求重定向、SSL验证、代理支持等,使得它成为了一个非常流行的网络请求库。Requests的API设计遵循了Pythonic原则,使得它更加容易学习和使用。其性能通常比urllib好,因为它提供了连接池管理、会话对象复用等优化措施
Requests是一个第三方库 首先需要安装requests模块 点击终端,输入

pip install requests

如果安装 慢 的话可以通过 镜像源安装 镜像源可参考 8个国内镜像源

pip install requests -i https://mirrors.aliyun.com/pypi/simple/

使用示例:

import requests# 发送GET请求
response = requests.get('https://www.baidu.com')
print(response.text)

3.对比

特性urllibRequests
安装无需安装,Python自带需要安装,pip install requests
设计较底层,需要手动处理更多细节高阶,提供完整请求方法
功能基本请求、cookies处理等全面,包括会话管理、请求重定向等
性能一般较好,因为有连接池等优化
易用性较难上手易于上手和学习

4.实战

以 https://movie.douban.com/ 为例
在这里插入图片描述

  • urllib GET 请求
import urllib.request# 发送GET请求
response = urllib.request.urlopen('https://movie.douban.com/')
data = response.read()
print(data.decode('utf-8'))# 发送POST请求
data = {'key': 'value'}
response = urllib.request.urlopen('https://www.baidu.com', data=data)
print(response.read().decode('utf-8'))

喔霍,没有想象中的顺利,报错了 urllib.error.HTTPError: HTTP Error 418:
在这里插入图片描述

可参考 HTTP响应状态码一览表

HTTP状态码418是一个非标准的HTTP状态码,被定义为"I’m a teapot"(我是一个茶壶)。这个状态码源自1998年的一个愚人节笑话,被写入了RFC 2324,Hyper Text Coffee Pot Control Protocol(超文本咖啡壶控制协议)。在实际的Web开发中,有些网站可能会使用这个状态码作为反爬虫策略的一部分。当服务器返回418状态码时,可能是因为服务器认为你的请求是一个爬虫,而不是一个正常的用户请求。

解决方法:

  1. 修改你的请求头,使其看起来更像一个正常的用户(也就是模拟浏览器去发出请求)。

请求头对爬虫来说,就好像一个面具,去模仿人去浏览网站,就不会被网站发现,也可以理解为打开网站的钥匙,上面我们知道,数据在链接中,但是我们申请后,返回状态码是418,请求失败,所有我们现在戴上面具,或者说,拿着钥匙再去申请,看看能不能成功打开。

  • 定义一个确定的User-Agent
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")

打开电脑浏览器----》审查元素—》网络—》点开一个请求—》User-Agent
在这里插入图片描述

  • 随机User-Agent
from fake_useragent import UserAgent
req.add_header('User-Agent',UserAgent().chrome)
  1. 如果网站使用了cookie来跟踪用户,你可能需要在你的爬虫中处理cookie。(设置了User-Agent还未解决的情况下考虑这种情况
  2. 有些网站可能会检查请求之间的时间间隔,如果请求过于频繁,可能会被认为是爬虫。在这种情况下,你可以在你的请求之间添加一些延迟。
time.sleep(random.uniform(0, 0.02))#具体时间可以自行测试

设置请求头后能正常访问的代码:

from urllib import requesturl = 'https://movie.douban.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'
}
req = request.Request(url=url, data=None, headers=headers)
response = request.urlopen(req)
print(response.read().decode('utf-8'))

结果:
在这里插入图片描述

  • requests GET 请求
import requests
url = 'https://movie.douban.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36'
}
#发送GET请求
response = requests.get(url, headers=headers)
print(response.text)

只是用法不同,结果返回是一样的 如上图所示

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

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

相关文章

Windows10专业版系统安装Hyper-V虚拟机软件

Windows10专业版系统安装Hyper-V虚拟机软件 适用于在Windows10专业版系统安装Hyper-v虚拟机软件。 1. 安装准备 1.1 安装平台 Windows 10 1.2. 软件信息 软件名称软件版本安装路径windowswindows 10 专业版Hyper-vHyper-v 2. Hyper-v搭建 2.1打开cmd软件 2.2打开控制面…

20 厂商文档学习资料查询

01 厂商介绍 新华三(H3C) 新华三是一家专注于IT基础设施产品和解决方案的公司,提供从网络设备到数据中心解决方案的全套服务。它是中国领先的网络解决方案供应商之一,业务涵盖企业网、数据中心、云计算等多个领域。 华为&#x…

Golang dlv远程debug

1. 前期准备 1.1. dlv安装 1.1.1. go install安装 go install github.com/go-delve/delve/cmd/dlvlatest1.1.2. 手动安装 下载 linuxx86 架构 二进制文件 📎dlv.linux.x86.zip zip文件,下载后( 如果没权限,记得 执行chmod ax…

网络性能测试工具:iperf3介绍

文章目录 前言一、iperf3 的安装和使用下载和安装参数说明 二、iperf3 测试服务端启动客户端启动服务端输出反向测试客户端服务端 前言 新接触的网络环境如何评估网络带宽和吞吐量呢,有的项目没有对业务流量进行合理规划,服务或者中间件出口带宽经常有被…

Unity屏幕分辨率适配方法

Unity屏幕分辨率适配方法 在Unity中实现屏幕分辨率适配,可以使用以下几种方法: 1. 使用Canvas Scaler 创建Canvas: 在Unity编辑器中创建一个Canvas,它将自动添加一个Canvas Scaler组件。 设置Canvas Scaler: 选择Ca…

golang语言的gofly快速开发框架如何设置多样的主题说明

本节教大家如何用gofly快速开发框架后台内置设置参数,配置出合适项目的布局及样式、主题色,让你您的项目在交互上加分,也是能帮你在交付项目时更容易得到客户认可,你的软件使用客户他们一般都是不都技术的,所以当他们拿…

prometheusgrafananode_export搭建监控平台

一、环境要求 1、docker安装docker环境 2、docker安装prometheus 3、docker安装grafana 4、node-exportor(安装在被测服务器上) 5、我的服务器是Ubuntu 二、docker 安装prometheus 1、下载Prometheus镜像 docker pull prom/prometheus 2、检查端口是否被占用 安装netstat命…

在Github找自己想要的的项目

点击进入github 1.首先进入到github的首页;搜索框搜(先关键字搜索)in:name 你的找的项目 比如: in:name Sping Boot2.进一步检索(点赞数高的) in:name Sping Boot star:>1000 3.如何要找最新的&…

初级硬件工程师,工作中遇到的问题list

1)元器件选型 刚进公司一般情况下是不会让新人选型的,最起码一年之后才会逐步接触,需要耐得了寂寞和坐冷板凳。但是有一种情况除外,人手紧张,并且电路板简单,会让新人选择简单的元器件,比如按键…

2024.5.31每日一题

LeetCode 找出缺失的重复数字 题目链接:2965. 找出缺失和重复的数字 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n2] 范围内。除了 a 出现 两次&#xff…

Python开发 我的世界 Painting-the-World: Minecraft 像素图片生成器

简介 Painting-the-World 是一款创新的工具,专为《我的世界》(Minecraft) 玩家及创作者设计,旨在将数字图片转变为游戏内的像素艺术。通过利用 RCON (Remote Console) 协议,本项目可以直接与《我的世界》服务器对话,根据输入的图…

双点双向重发布

1、由于ASBR在重发布路由条目时,将清除原有协议携带的度量,添加新协议的种子度量;一日使用双点或多点重发布,可能出现选路不佳;-----路由策略来解决 2、当优先级不同的两种协议在进行多点双向重发布后,可能第一台ASBR将A协议发布到B协议后&a…

Android MediaCodec 简明教程(九):使用 MediaCodec 解码到纹理,使用 OpenGL ES 进行处理,并编码为 MP4 文件

系列文章目录 Android MediaCodec 简明教程(一):使用 MediaCodecList 查询 Codec 信息,并创建 MediaCodec 编解码器Android MediaCodec 简明教程(二):使用 MediaCodecInfo.CodecCapabilities 查…

万户ezEIP企业管理系统 /member/success.aspx 命令执行漏洞复现

0x01 产品简介 万户ezEIP是一种企业资源规划软件,旨在帮助企业管理其各个方面的业务流程。它提供了一套集成的解决方案,涵盖了财务、供应链管理、销售和市场营销、人力资源等各个领域。 0x02 漏洞概述 万户ezEIP企业管理系统 /member/success.aspx 接口处存在命令执行漏洞…

可变参数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中,还可以定义可变参数。可变参数也称不定长参数,即传入函数中的实际参数可以是任意多个。 定义可变参数时&#xf…

IT运维保障企业网络畅通

目录 一、网络维护的基础知识 1.1 定期检查硬件设备 1.2 软件更新与补丁管理 二、网络优化技巧 2.1 带宽管理 2.2 流量分析与监控 2.3 网络拓扑优化 三、快速故障排除的技巧 3.1 制定故障排除流程 3.2 使用故障排除工具 3.3 定期培训与演练 在当今数字化时代&#x…

自然语言处理中的BERT模型深度剖析

自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于让计算机理解和生成人类语言。近年来,BERT(Bidirectional Encoder Representations from Transformers)模型的出现,极大地推动了NLP领域…

【Linux】Linux环境基础开发工具_3

文章目录 四、Linux环境基础开发工具2. vim3. gcc和g动静态库的理解 未完待续 四、Linux环境基础开发工具 2. vim vim 怎么批量化注释呢?最简单的方法就是在注释开头和结尾输入 /* 或 */ 。当然也可以使用快捷键: Ctrl v 按 hjkl 光标移动进行区域选择…

【LeetCode】38.外观数列

外观数列 题目描述: 「外观数列」是一个数位字符串序列,由递归公式定义: countAndSay(1) "1"countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码(RLE)是一种字符串压缩方法&#xff0c…

Spring Cloud应用框架:Nacos作为服务注册中心和配置中心

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。在Spring Cloud生态系统中,Nacos可以替代Eureka作为服务注册中心,同时也可以作为配置中心。所以我们这里使用Nacos作为Spring Cloud应用的服务注册中心和配置中心。 使用Nacos的好处 …