返回顶部
首页 > 资讯 > 后端开发 > Python >python之web模块学习-- url
  • 898
分享到

python之web模块学习-- url

模块pythonweb 2023-01-31 02:01:42 898人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

  下面继续学习python的WEB模块 ---  urllib2,一个源于urllib又高于urllib的模块。1  urllib2 简介    urllib2是Python自带的一个访问网页及本地文件的库。    与urllib相比,显

  下面继续学习pythonWEB模块 ---  urllib2,一个源于urllib又高于urllib的模块。


1  urllib2 简介

    urllib2是Python自带的一个访问网页及本地文件的库。

    与urllib相比,显著区别之处在于:

    1) urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,用urllib时不可以伪装User Agent字符串等。

    2) urllib提供urlencode方法用来encode发送的data,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。


2  urllib2 常用方法

 2.1  urllib2.urlopen

    urlopen()是最简单的请求方式,它打开url并返回类文件对象,并且使用该对象可以读取返回的内容

    urllib2.urlopen(url[, data][, timeout]) 
参数:
    url: 可以是包含url的字符串,也可以是urllib2.request类的实例。
    data: 是经过编码的post数据(一般使用urllib.urlencode()来编码)。
    没有data参数时为GET请求,设置data参数时为POST请求
    timeout: 是可选的超时期(以秒为单位),设置请求阻塞的超时时间,如果没有设置的话,会使用全局默认timeout参数,该参数只对Httphttps、FTP生效

假设urlopen()返回的文件对象u,它支持下面的这些常用的方法:

  • u.read([nbytes]) 以字节字符串形式读取nbytes个数据

  • u.readline() 以字节字符串形式读取单行文本

  • u.readlines() 读取所有输入行然后返回一个列表

  • u.close() 关闭链接

  • u.getcode() 返回整数形式的HTTP响应代码,比如成功返回200,未找到文件时返回404

  • u.geturl() 返回所返回的数据的实际url,但是会考虑发生的重定向问题

  • u.info() 返回映射对象,该对象带有与url关联的信息,对HTTP来说,返回的服务器响应包含HTTP包头。对于FTP来说,返回的报头包含'content-length'。对于本地文件,返回的报头包含‘content-length’和'content-type'字段。

注意:

    类文件对象u以二进制模式操作。如果需要以文本形式处理响应数据,则需要使用codecs模块或类似方式解码数据。

附代码:

>>> import urllib2
>>> res=urllib2.urlopen('http://www.51cto.com')
>>>res.read()
。。。。。。(一堆源代码)
>>>res.readline()
'<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n'
>>>res.readlines()
。。。(list形式的一堆源码)
>>>res.info()
<httplib.HTTPMessage instance at0x1a02638>
>>>res.getcode()
200
>>>res.geturl()
'http://www.51cto.com'
#最后关闭连接
>>> res.close()

  2.2  urllib2.request

     新建Request实例

    Request (url [data,headers[,origin_req_host ,[unverifiable]]]])
说明:
    对于比较简单的请求,urlopen()的参数url就是一个代表url的,但如果需要执行更复杂的操作,如修改HTTP报头,可以创建Request实例并将其作为url参数
参数:
    url: 为url字符串,
    data: 是伴随url提交的数据(比如要post的数据)。不过要注意,提供data参数时,它会将HTTP请求从'GET'改为‘POST’。
    headers: 是一个字典,包含了可表示HTTP报头的键值映射(即要提交的header中包含的内容)。
    origin_req_host: 通常是发出请求的主机的名称,如果请求的是无法验证的url(通常是指不是用户直接输入的url,比如加载图像的页面中镶入的url),则后一个参数unverifiable设为TRUE

    假设Request实例r,其比较重要的方法有下面几个:

  • r.add_data(data) 向请求添加数据。如果请求是HTTP请求,则方法改为‘POST’。data是向指定url提交的数据,要注意该方法不会将data追教导之前已经设置的任何数据上,而是使用现在的data替换之前的。

  • r.add_header(key, val) 向请求添加header信息,key是报头名,val是报头值,两个参数都是字符串。

  • r.addunredirectedheader(key,val) 作用基本同上,但不会添加到重定向请求中。

  • r.set_proxy(host, type) 准备请求到服务器。使用host替换原来的主机,使用type替换原来的请求类型。

附代码:

    1  向网页提交数据:

>>> import urllib
>>> import urllib2
>>> url='http://www.51cto.com'
>>> info={'name':"51cto",'location':'51cto'}
#info需要被编码为urllib2能理解的格式,这里用到的是urllib
>>> data=urllib.urlencode(info)
>>> data
'name=51cto&location=51cto'
>>> request=urllib2.Request(url,data)
>>> response=urllib2.urlopen(request)
>>> the_page=response.read()

    2  修改网页头信息:

    有时会碰到,程序也对,但是服务器拒绝你的访问。这是为什么呢?问题出在请求中的头信息(header)。 有的服务端有洁癖,不喜欢程序来触摸它。这个时候你需要将你的程序伪装成浏览器来发出请求。请求的方式就包含在header中。


    在使用 REST 接口时,Server 会检查Content-Type字段,用来确定 HTTP Body 中的内容该怎样解析。


>>> import urllib
>>> import urllib2
>>> url='http://www.51cto.com'
# 将user_agent写入头信息
>>> user_agent='Mozilla/4.0 (compatible; MSIE 5.5; windowsNT)'
>>>values={'name':'51cto','location':"51cto",'language':'Python'} 
>>> headers={'User-Agent':user_agent}
>>> data=urllib.urlencode(values)
>>> req=urllib2.Request(url,data,headers)
>>> response=urllib2.urlopen(req)
>>> the_page=response.read()

  2.3  异常处理

    不能处理一个respons时,urlopen抛出一个urlerror


urllib2.URLError:  
urllib2.HTTPError:

    HTTPerror是HTTP URL在特别的情况下被抛出的URLError的一个子类。


    urlerror:
    通常,urlerror被抛出是因为没有网络 连接(没有至特定服务器的连接)或者特定的服务器不存在。在这种情况下,含有reason属性的异常将被抛出,以一种包含错误代码 和文本错误信息的tuple形式。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
#多写了一个 m (comm)
req = urllib2.Request('http://www.51cto.comm')
try:
    urllib2.urlopen(req)
except urllib2.URLError,e:
    print e
    print e.reason

结果:


<urlopen error [Errno 11004] getaddrinfo failed>
[Errno 11004] getaddrinfo failed


    以上是 urllib2的简单用法,如果要深入:

http://www.cnblogs.com/yuxc/arcHive/2011/08/01/2123995.html

    urllib和urllib2之间的区别:

http://www.cnblogs.com/yuxc/archive/2011/08/01/2124073.html



--结束END--

本文标题: python之web模块学习-- url

本文链接: https://lsjlt.com/news/186578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python之web模块学习-- url
      下面继续学习python的web模块 ---  urllib2,一个源于urllib又高于urllib的模块。1  urllib2 简介    urllib2是python自带的一个访问网页及本地文件的库。    与urllib相比,显...
    99+
    2023-01-31
    模块 python web
  • python之web模块学习-- htt
    1  httplib简介httplib 是python中http协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互    httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第...
    99+
    2023-01-31
    模块 python web
  • node.js入门学习之url模块
    前言 今天主要记录的是关于node.js里面的一个简单的模块,url模块。这个url的模块要使用的话需要先引入。若只是在命令行里比如cmd或git bash 等使用url这个模块的话,是不需要require...
    99+
    2022-06-04
    模块 入门 node
  • Python模块学习之IPy模块
    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第...
    99+
    2023-01-31
    模块 Python IPy
  • NodeJS学习笔记之(Url,QueryString,Path)模块
    一,开篇分析 这篇文章把这三个模块拿来一起说,原因是它们各自的篇幅都不是很长,其次是它们之间存在着依赖关系,所以依次介绍并且实例分析。废话不多说了,请看下面文档: (1),"Url模块"   来个小栗子:...
    99+
    2022-06-04
    学习笔记 模块 NodeJS
  • Python学习之PyYaml模块
    我需要解析twemproxy的配置文件中的pool和后端的redis主机。采用shell解析yml文件太麻烦,正好python有正对于yaml文件解析的pyyaml模块例如twemporxy的配置文件nutcracker.yamlalpha...
    99+
    2023-01-31
    模块 Python PyYaml
  • python模块之paramiko学习<
    简介: paramiko是python(2.2或更高)的模块,遵循SSH2协议实现了安全(加密和认证)连接远程机器。 安装所需软件包: http://ftp.dlitz.net/pub/dlitz/crypto...
    99+
    2023-01-31
    模块 python paramiko
  • python学习之argparse模块
    一、简介:argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,例如 python parseTest.py input.txt outpu...
    99+
    2023-01-31
    模块 python argparse
  • Python学习之MySQLdb模块
    CentOS下安装sudo yum install MySQL-python可以参考http://www.mikusa.com/python-mysql-docs/index.html  获取更多信息MySQL-python 为Python...
    99+
    2023-01-31
    模块 Python MySQLdb
  • Python学习笔记之json模块和pickle模块
    目录json模块序列化与反序列化json模块中的方法pickle模块总结json模块 json用于不同语言之间的数据交换,比如C和Python之间等等,即可跨语言。而pickle只能...
    99+
    2023-05-18
    json模块 pickle模块 python各个模块讲解
  • python模块学习----nmap模块
    安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理...
    99+
    2023-01-31
    模块 python nmap
  • 小白学习Python之路---re模块学
    本节大纲:   1.正则表达式   2.re模块的学习   3.速记理解技巧   4.挑战练习--开发一个简单的python计算器   5.心得总结   6.学习建议     正则表达式:   正则表达式,又称规则表达式。(英语:Regu...
    99+
    2023-01-31
    之路 模块 Python
  • Python 模块学习
        模块学习: http://wsyht90.blog.51cto.com/9014030/1845737 1、getpass 2、os 3、sys 4、subprocess 5、hashlib 6、json 7、pickle 8、sh...
    99+
    2023-01-31
    模块 Python
  • python模块学习
    系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.st...
    99+
    2023-01-31
    模块 python
  • Python学习之包与模块详解
    目录什么是 Python 的包与模块包的身份证如何创建包创建包的小练习包的导入 - import模块的导入 - from…import导入子包及子包函数的调用导入主包及...
    99+
    2024-04-02
  • Python学习之日志模块详解
    目录日志的作用日志的等级logging 模块的使用logging 模块演示小案例OK,今天我们来学习一下 python 中的日志模块,日志模块也是我们日后的开发工作中使用率很高的模块...
    99+
    2024-04-02
  • python hashlib模块学习
    目录 hashlib 模块 破解密码 hmac 模块 1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,...
    99+
    2023-01-31
    模块 python hashlib
  • python模块学习(1)
    模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。模块也是Python对象,具有随机的名字属性用来绑定或引用。简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变...
    99+
    2023-01-31
    模块 python
  • python学习-re模块
    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面我主要总结了re的常用方法。1.re的简介    使用python...
    99+
    2023-01-31
    模块 python
  • Python学习-pycurl模块
    pycurl是一个用c语言编写的libcurl Python实现,功能非常强大,支持操作协议有FTP,HTTP,HTTPS,TELNET等。模块的常用方法说明:close()方法,对应libcurl包中的curl_easy_cleanup方...
    99+
    2023-01-31
    模块 Python pycurl
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作