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 urlopen
    
    with 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, urlopen
    
    req = 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 urlopen
    
    with 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.request

url = '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 requests

url = '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 requests

url = '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}')

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

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

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

相关文章

vscode删除后重装还有原来的配置问题,彻底删除vscode,删除vscode安装过的插件和缓存

VSCode卸载后进行重新安装,发现新安装的还有原来的一些配置,卸载的不彻底,有时候也容易出问题,可按照如下方法卸载干净: 1.进入控制面板卸载VSCode,也可以在VSCode的安装目录下用程序自带的卸载程序 2.这…

灯光相机已就位!Cinerama LAND 销售活动开启序幕!

你准备好参加 The Sandbox 元宇宙中的重磅活动了吗?Cinerama LAND 拍卖即将来临,这是你踏入电影梦想世界的好机会。准备好构建你自己的沉浸式电影宇宙吧!绝对不容错过! 简要概括 🍿活动开始日期:11 月 9 日…

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Django视图层()

视图层 django视图层:Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面,并且在返回浏览器之前还可以给html文件…

原生应用与hybrid app开发的流程区别

Hybrid App(混合 App)已经成为大家接触最为广泛的 App 形式,不管是我们用到的微信、支付宝还是淘宝、京东等大大小小的应用都非常热衷于Hybrid App 带来的研发效率提升和灵活性。 但我们正式进入到 hybrid App 的讨论前,有必要先…

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错, 或者安装完 spacy,无法正…

springboot-error

Invalid bound statement (not found): com.example.demo.mapper.UserMapper.findAll 一直报错,找不到相应的mapper文件。 排除以下原因之后,还是不对: https://blog.csdn.net/xxpxxpoo8/article/details/127548543 最后发现是因为我的mapp…

【Transformer从零开始代码实现 pytoch版】(六)模型基本测试运行

模型基本测试及运行 (1)构建数据生成器 def data_generator(V, batch, num_batch):""" 用于随机生成copy任务的数据:param V: 随机生成数字的最大值1:param batch: 每次输送给模型更新一次参数的数据量:param num_batch: 输送多少次完成…

第四天课程 分布式搜索引擎1

分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: …

第十九章总结:Java绘图

19.1:Java绘图类 19.2:绘制图形 package nineteentn; import java.awt.*; import javax.swing.*;public class DrawCircle extends JFrame {private final int OVAL_WIDTH 80; // 圆形的宽private final int OVAL_HEIGHT 80; // 圆形的高public DrawC…

nginx-静态资源实践(压缩配置,常见静态资源配置)

Nginx 实战搭建一个静态资源web服务器 第一个阶段访问单个文件 listen 80; #监听的端口 server_name localhost; #服务名称 #配置路径映射 location /geotools/ {alias geotools/; #将geotools/ 和/geotools/路径一一对应起来 }目录关系如下: nginx下面建一个g…

软考系统分析师知识点集锦一:企业信息化战略与实施

一、信息化战略体系(★★★★★) 1、信息资源规划ISP 信息资源规划是信息化建设的基础工程,是指对企业生产经营活动所需要的信息,对产生、获取、处理、存储、传输和利用等方面进行全面的规划。 IRP强调将需求分析与系统建模紧密结合起来,需…

酷柚易汛ERP - 其他入库单操作指南

1、应用场景 处理其他非采购类型的入库单据,比如赠品、获赔商品、以货抵债、借入、接受捐赠等不参与采购管理的入库类业务。 2、主要操作 2.1 新增其他入库单 打开【仓库】-【其他入库单】,选择商品后,根据存货核算方法自动计算出单位成本…

栈的实现---超详细

栈的实现 文章目录 栈的实现一、栈的模型二、栈的代码实现以及测试用例①栈的初始化②入栈③出栈④弹出栈顶⑤判断栈空间是否为空⑥计算栈空间长度⑦销毁栈⑧测试用例 一、栈的模型 首先栈有两个概念 1.数据结构里的栈。2.语言/操作系统中的栈(内存空间),可能会在递…

JUC工具包介绍

目录 1. 引言 2. 介绍JUC工具包 2.1. JUC工具包的概述和作用 2.2. 什么是JUC工具包? 2.2.1. JUC工具包与传统线程编程的区别和优势 3. 线程池(Executor) 3.1. 线程池的概念和优势 3.1.1. ThreadPoolExecutor类的介绍和使用示例 3.1.…

Docker安装Octoprint 3D打印控制软件

Octoprint简介 Octoprint是一个运行在Linux系统上的开源套件,可以为普通的3D打印机添加强大的外围管理功能。 web管理界面远程操控摄像头实时监控视频录制、延时摄影在线切片图形化的温度曲线显示手机监控操作免SD卡和U盘通过插件和USB/GPIO接口实现更多功能 Oct…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

分布式锁介绍

为什么需要分布式锁 在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、ReentrantLock等。 但是在后端集群部署的系统中,程序在不同的JVM虚拟机中运行,且…

PostGIS学习教程五:数据

教程的数据是有关纽约市的四个shapefile文件和一个包含社会人口经济数据的数据表。在前面一节我们已经将shapefile加载为PostGIS表,在后面我们将添加社会人口经济数据。 下面描述了每个数据集的记录数量和表属性。这些属性值和关系是我们以后分析的基础。 要在pgAdm…

fileread任意文件读取学习笔记

任意文件读取概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成&#x…