python [3.2] urllib的使用

2023-11-14

urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)的模块。它用urlopen函数的形式提供了一个非常简洁的接口。这使得用各种各样的协议获取url成为可能。它同时 也提供了一个稍微复杂的接口来处理常见的状况-如基本的认证,cookies,代理,等等。这些都是由叫做opener和handler的对象来处理的。

一:基本使用方法+异常处理

from urllib.error import URLError,HTTPError
import urllib.request
import urllib.parse
url='http://www.baidu.com/s'
values={'wd':'python',
        'opt-webpage':'on',
        'ie':'gbk'}
url_values=urllib.parse.urlencode(values)
#print(url_values)

url_values=url_values.encode(encoding='UTF8')
full_url=urllib.request.Request(url,url_values)
#or ony one sentense:full_url=url+'?'+url_values

try:
    response=urllib.request.urlopen(full_url)   #open=urlopen
except HTTPError as e:
    print('Error code:',e.code) 
except URLError as e:
    print('Reason',e.reason)
the_page=response.read()
print(the_page)


调用urlopen函数对请求的url返回一个response对象。这个response是一个file-like的对象,这意味着你能用.read()函数操作这个response对象

注意:urllib.request.Request(url,data) data参数是要进行任意编码(utf8...)的,否则会报POST data should be bytes or an iterable of bytes. It cannot be str.错误.

           或者用url+'?'+url_values来合成full_url ,只用一条语句,代码更简洁


二:add headers to HTTP request

user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
....
headers={'User-Agent':user_agent}
....
full_url=urllib.request.Request(url,url_values,headers)


三:Openers 和Handlers


当你获取一个URL时,你使用一个opener(一个可能以一个比较迷糊名字命名的实例–urllib2.OpenerDirector)。正常情况下
我们一直使用默认的opener,但你也可以创建自定义的openers。opener使用操作器(handlers)。所有的重活都交给这些handlers来做。
每一个handler知道以哪种url协议(http,ftp等等)打开url,或者怎么处理打开url时的某些方面,如,HTTP重定向,或者HTTP cookie。
你将会创建openers如果你想要用安装特别的handlers获取url,例如,获取一个处理cookie的opener,或者一个不处理重定向的opener。

默认opener有对普通情况的操作器 (handlers)- ProxyHandler, UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.

创建Openers:
枚举一个OpenerDirector,然后多次调用.add_handler(some_handler_instance)来创建一个opener。

或用build_opener,这是一个很方便的创建opener对象的函数,它只有一个函数调用。build_opener默认会加入许多handlers

import urllib.request
proxy_support = urllib.request.ProxyHandler({})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python [3.2] urllib的使用 的相关文章

  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • ThreadLocal详解-ThreadLocal这一篇就够了

    ThreadLocal简介 ThreadLocal 用于存储当前线程的变量 对其他线程是隔离 ThreadLocal为每个线程提供 get 或 set 方法来创建独立初始化的变量副本 ThreadLocal实例通常是类中希望将状态与线程相关
  • postgresql学习笔记之归档堆积处理(亲测有用)

    一 跟归档相关的参数 1 查看是否开启归档模式 show archive mode 仅在已完成的wal段进行归档 如果强制归档 归档段文件大小也是16M 2 查看归档相关参数 show archive timeout 超过这个时长就必须归档
  • 《信号与系统学习笔记》—拉普拉斯变换(二)

    注 本博客是基于奥本海姆 信号与系统 第二版编写 主要是为了自己学习的复习与加深 一 用拉普拉斯变换分析与表征线性时不变系统 1 在拉普拉斯变换的范畴内 一般称H s 为系统函数或转移函数 线性时不变系统的很多性质都与系统函数在s平面的特性
  • 基于STM32WIFI远程监控电压电流表(二)电流检测电路

    电流检测电路 电流检测的原理 电流检测电路 1 低侧检测 2 高侧检测 应用电路 电流检测的原理 电路检测电路常用于 高压短路保护 电机控制 DC DC换流器 系统功耗管理 二次电池的电流管理 蓄电池管理等电流检测等场景 对于大部分应用 都
  • Augment Reality(AR)现实增强的原理

    这篇博客将介绍OpenCV Augment Reality AR 增强现实的基础知识 增强现实技术指利用真实世界中的环境 然后通过计算机生成的程序来增强这些环境 从而不断丰富环境 通常 这是通过视觉 听觉和触觉 触觉交互的某种组合来实现的
  • lua调用shell 脚本

    Lua中 os execute可以执行dos命令 但是返回的是系统状态码 默认输出 io popen 也可以执行dos命令 但是返回一个文件 eg 复制代码 代码如下 local t io popen svn help local a t
  • vim编辑器显示与取消行号

    显示行号 set nu 取消显示行号 set nonu
  • 浅析 spring 事件驱动

    1 ApplicationContext publishEvent 同步还是异步 为什么 先说结论 默认情况下同步的 即事件发布者会阻塞等待事件处理完成 这是因为Spring的设计初衷是为了保证事件的有序处理和事务的一致性 看下代码实现 p
  • python开发面向对象基础:人狗大战学面向对象

    一 通过函数写人狗大战这个故事 1 usr bin env python 2 coding utf 8 3 4 1 函数 人模子 5 def person name level life value 6 p dic 7 name name
  • C++专题:多态性与虚函数(详细!)

    目录 多态性的概念 虚函数 动态联编 晚绑定 和静态联编 早绑定 覆盖 重写 重载 隐藏 成员函数覆盖 重写 成员函数重载 成员函数隐藏 重定义 纯虚函数 抽象类 虚析构函数 限制构造函数 多态性是面向对象程序设计的重要特征之一 多态性机制
  • SQL及NoSQL学习系列1

    关系型数据库SQL 关系型数据库系统实现了关系模型 并用它来处理数据 关系模型在表中将信息与字段关联起来 也就是schemas 从而存储数据 这种数据库管理系统需要结构 例如表 在存储数据之前被定义出来 有了表 每一列 字段 都存储一个不同
  • javassist 在 spring boot jar中启动报错:javassist.NotFoundException

    由于需要在Springboot项目中动态替换一个方法的实现 所以引入了javassist 然而在IDEA中开发时一切正常 但是java jar启动就报错 Caused by javassist NotFoundException 在stac
  • [创业之路-64]:股权激励的十种形式

    薪酬有三件事 第一 实际绩效提高 第二 员工感受提高 第三 放大员工的未来价值 股权激励是放大价值最有效的说法 股权激励有利于企业与员工成为利益共同体 让员工相信对企业有利的一定对自己有利 股权激励有两个方向 一个是与奖励相关 二是与福利相
  • python入门学习随记(四)

    4 1 查找指定字符 本题要求编写程序 从给定字符串中查找某指定的字符 输入格式 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 不超过80个字符 输出格式 如果找到 在一行内按照格式 index 下标 输出该字符在字符
  • WinForm:禁用Panel容器滚动条自动移动位置的功能

    今天遇到了一个问题 描述如下 有一个Panel容器 将AutoScroll属性设置为True 此时Panel容器会在内容过多时自动展示一个滚动条 这个滚动条存在一个缺点 即会随着焦点变化自动滚向焦点位置 如果仅初始化界面时Panel滚动条位
  • MIT-BIH ECG 心电数据的下载和读取图解

    一 如何下载获取MIT BIH的数据从下面这个官方链接页面可以下载到所有48组MIT BIH心电数据 http www physionet org physiobank database mitdb 下面这个链接是MIT BIH数据库的详细
  • cocos2dx游戏以插件形式嵌入IE浏览器的实现

    一 cocos2dx渲染窗口修改及导出dll 1 思路 cocos2dx引擎使用opengl进行游戏画面的渲染 opengl的渲染窗口由其自身创建 具有跨平台性 那么我可以对渲染窗口进行修改 便可以达到将游戏窗口嵌入其他窗口的效果 2 实现
  • 【火灾检测】基于HSV特征实现火灾检测附matlab代码

    1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题 提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法 火焰颜色特征是基于RGB颜色模型中的R G B三基色分量和它们之间的关系来判断是否有火焰
  • 网络攻防——ARP欺骗

    arp基础攻防 1 什么是arp攻击 2 arp攻击条件 3 arp如何进行攻击 3 1靶机环境搭建 3 2攻击机环境搭建 3 3如何发起arp攻击 4 如何防止arp攻击 5 参考文献 1 什么是arp攻击 ARP攻击是指攻击者利用ARP
  • python [3.2] urllib的使用

    urllib是python的一个获取url Uniform Resource Locators 统一资源定址器 的模块 它用urlopen函数的形式提供了一个非常简洁的接口 这使得用各种各样的协议获取url成为可能 它同时 也提供了一个稍微