python 爬虫之urllib 库的相关模块的介绍以及应用

在这里插入图片描述

文章目录

  • urllib.request 模块
      • 打开 URL:
      • 发送 HTTP 请求:
      • 处理响应:
  • 应用
      • 如何读取并显示网页内容
      • 提交网页参数
      • 使用HTTP 代理访问页面

urllib.request 模块

在 Python 中,urllib.request 模块是用于处理 URL 请求的标准库模块之一。它提供了一组功能,用于打开、读取和处理 URL,包括发送 HTTP 请求和处理响应。以下是 urllib.request 模块的一些主要功能:

打开 URL:

  1. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

    • 用于打开指定的 URL。
    • url 是要打开的 URL 字符串。
    • data 是可选的请求数据,如果需要发送 POST 请求,则可以通过这个参数提供数据。
    • timeout 是可选的超时时间,以秒为单位。
    • cafile, capath, cadefault 用于指定 SSL/TLS 连接的证书。
    • context 用于指定 SSL 上下文。
    from urllib.request import urlopenwith urlopen('https://www.example.com') as response:html = response.read()print(html)
    

发送 HTTP 请求:

  1. urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

    • 用于构建一个 HTTP 请求对象,可以在 urlopen 中使用。
    • url 是要请求的 URL。
    • data 是可选的请求数据。
    • headers 是可选的请求头字典。
    • method 是可选的请求方法,如 ‘GET’ 或 ‘POST’。
    from urllib.request import Request, urlopenreq = Request('https://www.example.com', headers={'User-Agent': 'Mozilla/5.0'})
    with urlopen(req) as response:html = response.read()print(html)
    

处理响应:

  1. HTTPResponse 对象

    • urlopen 返回的对象是一个 http.client.HTTPResponse 类型的实例。
    • 提供了读取响应内容、获取响应头、获取状态码等方法和属性。
    from urllib.request import urlopenwith urlopen('https://www.example.com') as response:status_code = response.getcode()headers = response.getheaders()html = response.read()print(f"Status Code: {status_code}")print(f"Headers: {headers}")print(html)
    

这些是 urllib.request 模块中一些主要的功能和方法。使用这个模块,可以在 Python 中轻松处理 URL 请求,获取远程资源的内容。

应用

如何读取并显示网页内容

当你想要读取并显示网页内容时,可以按照以下步骤使用Python的urllib.request库:

  1. **导入urllib.request模块:**首先,导入urllib.request模块,它包含了用于打开URL的功能。

    import urllib.request
    
  2. **指定要读取的网页URL:**在你的代码中指定你想要读取的网页的URL。

    url = 'http://www.example.com'
    

    'http://www.example.com'替换为你感兴趣的网页的URL。

  3. **打开URL并获取文件对象:**使用urllib.request.urlopen函数打开指定的URL,它返回一个文件对象,你可以使用该对象来读取网页内容。

    with urllib.request.urlopen(url) as response:# 在此处执行对网页内容的操作
    

    使用with语句可以确保在处理完网页内容后自动关闭文件对象,这是良好的实践。

  4. **读取网页内容:**使用文件对象的read()方法来读取网页的内容。

    with urllib.request.urlopen(url) as response:web_content = response.read()
    

    web_content现在包含了网页的字节内容。

  5. **将字节内容转换为字符串并显示:**使用decode()方法将字节内容转换为字符串,并将其打印出来。

    with urllib.request.urlopen(url) as response:web_content = response.read()print(web_content.decode('utf-8'))
    

    在这里,假设网页使用UTF-8编码。如果你知道网页使用其他编码,可以相应地调整decode方法的参数。

整个代码示例:

import urllib.requesturl = 'http://www.example.com'with urllib.request.urlopen(url) as response:web_content = response.read()print(web_content.decode('utf-8'))

这个代码会打开指定的URL,读取网页内容,然后将其作为字符串显示在控制台上。

提交网页参数

当你需要向网页提交参数时,可以使用HTTP请求中的POST方法。下面是使用Python的requests库的一步步介绍:

  1. **安装requests库:**如果你还没有安装requests库,可以通过以下命令安装:

    pip install requests
    
  2. **导入requests模块:**在你的Python脚本中导入requests模块。

    import requests
    
  3. **指定要提交参数的URL:**在你的代码中指定你要提交参数的网页的URL。

    url = 'http://www.example.com/post_endpoint'
    

    'http://www.example.com/post_endpoint'替换为你要提交参数的实际网页地址。

  4. **准备要提交的参数:**创建一个字典,其中包含你想要提交的参数。

    payload = {'param1': 'value1', 'param2': 'value2'}
    

    这里的payload是一个字典,包含了两个参数param1param2以及对应的值。

  5. **发送POST请求并传递参数:**使用requests.post方法发送POST请求,并通过data参数传递参数。

    response = requests.post(url, data=payload)
    

    在这里,url是你指定的网页地址,data是要提交的参数字典。

  6. **检查响应:**检查服务器的响应,看是否请求成功。

    if response.status_code == 200:print('请求成功!')print('响应内容:', response.text)
    else:print(f'请求失败,状态码: {response.status_code}')
    

    这里我们通过response.status_code检查HTTP响应状态码,如果状态码是200,则表示请求成功。你可以根据实际需要处理不同的状态码。

整个代码示例:

import requestsurl = 'http://www.example.com/post_endpoint'payload = {'param1': 'value1', 'param2': 'value2'}response = requests.post(url, data=payload)if response.status_code == 200:print('请求成功!')print('响应内容:', response.text)
else:print(f'请求失败,状态码: {response.status_code}')

这个代码将以POST方式向指定的URL提交参数,并输出服务器的响应。

使用HTTP 代理访问页面

当你想要通过HTTP代理访问页面时,你可以使用Python的requests库,并设置代理。以下是一步步的介绍:

  1. **安装requests库:**如果你还没有安装requests库,可以通过以下命令安装:

    pip install requests
    
  2. **导入requests模块:**在你的Python脚本中导入requests模块。

    import requests
    
  3. **指定要访问的URL:**在你的代码中指定你要访问的网页的URL。

    url = 'http://www.example.com'
    

    'http://www.example.com'替换为你要访问的实际网页地址。

  4. **指定代理:**设置代理服务器的地址。代理服务器可以是HTTP代理或者HTTPS代理,具体取决于你的代理类型。

    proxy = {'http': 'http://your_http_proxy_address','https': 'http://your_https_proxy_address'
    }
    

    your_http_proxy_addressyour_https_proxy_address替换为你实际使用的代理服务器地址。

  5. **发送请求时使用代理:**通过proxies参数将代理传递给requests.getrequests.post等方法。

    response = requests.get(url, proxies=proxy)
    

    在这里,url是你指定的网页地址,proxies是包含了代理地址的字典。

  6. **检查响应:**检查服务器的响应,看是否请求成功。

    if response.status_code == 200:print('请求成功!')print('响应内容:', response.text)
    else:print(f'请求失败,状态码: {response.status_code}')
    

    这里我们通过response.status_code检查HTTP响应状态码,如果状态码是200,则表示请求成功。你可以根据实际需要处理不同的状态码。

整个代码示例:

import requestsurl = 'http://www.example.com'proxy = {'http': 'http://your_http_proxy_address','https': 'http://your_https_proxy_address'
}response = requests.get(url, proxies=proxy)if response.status_code == 200:print('请求成功!')print('响应内容:', response.text)
else:print(f'请求失败,状态码: {response.status_code}')

请注意,具体的代理设置可能因你的网络环境和代理类型而有所不同。确保使用你实际网络环境中的正确代理信息。

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

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

相关文章

【JMeter】组件之 Listener监听器选择

JMeter中监听器的作用就是收集、显示JMeter取样器的结果,并以树形、图表、表格的形式显示出来。还可以将监听结果保存成文件。 View Results Tree-->察看结果树 Summary Report-->汇总报告 为测试中的每个不同命名的请求创建一行。这与聚合报告类似&#xff…

C与汇编深入分析

汇编怎么调用C函数 直接调用 BL main传参数 在arm中有个ATPCS规则(ARM-THUMB procedure call standard)(ARM-Thumb过程调用标准)。 约定r0-r15寄存器的用途: r0-r3:调用者和被调用者之间传递参数r4-r11…

用Go实现yaml文件节点动态解析

1.摘要 在大多数Go语言项目中, 配置文件通常为yaml文件格式, 在文件中可以设置项目中可灵活配置的各类参数, 通常这类参数都是比较固定的, 可以将其映射为对应的结构体在项目中进行使用, 如果需要调整参数时, 只需要增减结构体参数字段内容即可。 但同时还存在另外一种情况, …

设计测试用例的6种基本原则

设计测试用例的基本原则,对于软件测试非常重要,这些原则有助于设计出高质量、全面、有效的测试用例,从而提高软件测试的效率和准确性,维护软件的质量和稳定。如果在设计用例时没有遵循基本原则,这会影响用例的全面性、…

百望云斩获“新华信用金兰杯”ESG优秀案例 全面赋能企业绿色数字化

近年来,中国ESG蓬勃发展,在政策体系构建、ESG信披ESG投资和国际合作等方面都取得了阶段性成效,ESG生态不断完善。全社会对ESG的认识及实践也在不断深化,ESG实践者的队伍在不断发展壮大。 ESG作为识别企业高质量发展的重要指标&…

WebSocket魔法师:打造实时应用的无限可能

1、背景 在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果&…

二维码在区域巡查中的应用:隐患上报、巡逻巡更、管线巡查

针对管理制度不健全、维修不及时、纸质表格容易丢失等问题,可以在草料上搭建区域巡查二维码系统。通过组合功能模块的方式,实现扫码记录巡查情况、上报隐患和整改信息、发现异常问题后及时反馈给相关负责人等功能。 比如上海延吉物业管理有限公司搭建的…

uniapp的实战总结大全

🙂博主:冰海恋雨 🙂文章核心:uniapp部分总结 目录 ​编辑 目录 前言: 解决方案 1. 跨平台开发 2. Vue.js生态 3. 组件库 4. 自定义组件 5. Native能力 6. 插件生态 7. 性能优化 写法 1. 模板&#xf…

在ant构建脚本中调用maven的命令

有时候想用maven管理依赖,用ant构建。 在ant的build.xml文件中可以使用exec这个task来调用系统命令,也就可以调用maven的命令。 例如,执行maven的命令mvn dependency:copy-dependencies,可以将项目的依赖提取出来,放…

Zookeeper 命令使用和数据说明

文章目录 一、概述二、命令使用2.1 登录 ZooKeeper2.2 ls 命令,查看目录树(节点)2.3 create 命令,创建节点2.4 delete 命令,删除节点2.5 set 命令,设置节点数据2.6 get 命令,获取节点数据 三、数…

时间序列基础->数据标签、数据分割器、数据加载器的定义和讲解(零基础入门时间序列)

一、本文介绍 各位小伙伴好,最近在发时间序列的实战案例中总是有一些朋友问我时间序列中的部分对数据的操作是什么含义,我进行了挺多的介绍和讲解但是问的人越来越多,所以今天在这里单独发一篇文章来单独的讲一下时间序列中对数据的处理操作…

AOMedia发布免版税沉浸音频规范IAMF

11月10日,开放媒体联盟(AOMedia)发布了旗下首个沉浸式音频规范IAMF(https://aomediacodec.github.io/iamf/),IAMF是一种编解码器无关的容器规范,可以携带回放时间渲染算法和音频混音的信息&…

矩阵置零00

题目链接 矩阵置零 题目描述 注意点 使用 原地 算法 解答思路 思路是需要存储每一行以及每一列是否有0,因为要尽可能使用更少的空间,且新设置为0的格子不能对后续的判断产生影响,所以要在原有矩阵上存储该信息先用两个参数存储第一行和第…

ISP图像处理Pipeline

参考:1. 键盘摄影(七)——深入理解图像信号处理器 ISP2. Understanding ISP Pipeline3. ISP图像处理流程介绍4. ISP系统综述5. ISP(图像信号处理)之——图像处理概述6. ISP 框架7. ISP(图像信号处理)算法概述、工作原理、架构、处理流程8. ISP全流程简介9. ISP流程介…

《视觉SLAM十四讲》-- 后端 1(上)

文章目录 08 后端 18.1 概述8.1.1 状态估计的概率解释8.1.2 线性系统和卡尔曼滤波(KF)8.1.3 非线性系统和扩展卡尔曼滤波(EKF)8.1.4 小结 08 后端 1 前端视觉里程计可以给出一个短时间内的轨迹和地图,但由于不可避免的…

GPT 写作与改编

GPT 写作与改编 文商科GPT 写作收益 改编技巧【改编一段话】【改编评价】【意识预设】落差,让顾客看到就感性和冲动害怕,让顾客看到就想买和拥有画面,切换空间,瞬间代入,勾人魂魄对比,设置参考物&#xff0…

保序回归:拯救你的校准曲线(APP)

保序回归:拯救你的校准曲线(APP) 校准曲线之所以是评价模型效能的重要指标是因为,校准曲线衡量模型预测概率与实际发生概率之间的一致性,它可以帮助我们了解模型的预测结果是否可信。一个理想的模型应该能够准确地预测…

互斥量保护资源

一、概念 在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步, 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别,互斥型信号量可以有效解决优先级反转现 象。 …

立仪科技光谱共焦在半导体领域的应用

半导体技术在近年来以极快的速度发展,对质量和精密度的要求也不断提升。在这样的背景下,用于材料与设备研究的先进检测技术如光谱共焦成像将自然地找到一席之地。下面我们将详细探讨一下光谱共焦在半导体领域中的应用。 光谱共焦技术,通过在细…

【Linux】进程等待

文章目录 tips一、进程等待是什么?二、为什么要有进程等待?三、怎么做到进程等待?先看看什么是进程等待wait和waitpidstatus参数options参数非阻塞轮询 进程等待的原理 总结 tips 下面的代码可以循环检测进程。 while :; do ps ajx | head …