返回顶部
首页 > 资讯 > 后端开发 > Python >Python 中的 urllib2 模块
  • 225
分享到

Python 中的 urllib2 模块

模块Python 2023-01-31 02:01:46 225人浏览 薄情痞子

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

摘要

通过python 的 urllib2 模块,可以轻易的去模拟用户访问网页的行为。这里将自己的学习过程简单的记录下来。一、urlopen函数    urlopen(url, data=None) -- Basic usage is the s

通过python 的 urllib2 模块,可以轻易的去模拟用户访问网页的行为。

这里将自己的学习过程简单的记录下来。


一、urlopen函数


    urlopen(url, data=None) -- Basic usage is the same as original
    urllib.  pass the url and optionally data to post to an Http URL, and
    get a file-like object back.  One difference is that you can also pass
    a Request instance instead of URL.  Raises a URLError (subclass of
    IOError); for HTTP errors, raises an HTTPError, which can also be
    treated as a valid response.

它的基本用法同urllib 库中的用法是一样的。urllib 中的urlopen 的注释如下:


    urlopen(url, data=None, proxies=None)
        Create a file-like object for the specified URL to read from.


但不同于urllib 的是,urllib2 中的urlopen函数的第一个参数url 可以是一个Request 实例。


1、基本用法

Example:

#等同urllib 中的urlopen 函数的用法
In [12]: response = urllib2.urlopen('http://www.baidu.com')
In [13]: response.read()

# urllib2 中的使用request 实例的用法
In [14]: request = urllib2.Request('http://www.baidu.com')
In [15]: response = urllib2.urlopen(request)
In [16]: response.read()

我在这里还是非常喜欢第二种使用方式。毕竟一个http 的请求首先要有request,然后才能存在response。这样在编程的思路上就比较明了了。代码阅读起来也很清晰。


2、模拟POST请求

以上所模拟的请求,全部都是GET方式的请求,那如果需要模拟POST方式的请求呢?

查看Request的帮助help(urllib2.Request) 中发现,它的__init__ 构造函数是这样声明的

__init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False)

从声明上来看POST 的数据可以放到data 中,且我们还可以通过headers 设置http的请求头参数


Example:

import urllib
import urllib2
 
values = {}
values['username'] = "God"
values['passWord'] = "XXXX"
data = urllib.urlencode(values)  # 使用了urllib库中的urlencode方法
url = "http://xxxx.xxxxx/login"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()


大家可以针对具体的场景去更换自己的url、username 和 password


3、设置HTTP请求头

再通过headers参数去尝试一下修改http 请求头的一些信息。在上一个例子中进行稍微的修改

import urllib
import urllib2
 
values = {}
values['username'] = "God"
values['password'] = "XXXX"
data = urllib.urlencode(values) 
url = "http://xxxx.xxxxx/login"
headers = {'User-Agent':'ozilla/5.0 (X11; ubuntulinux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0','Content-Type':'text/html; charset=utf-8','Referer':'http://www.baidu.com/'}
request = urllib2.Request(url,data,headers)
response = urllib2.urlopen(request)
print response.read()


可以通过浏览器提供的F12功能去找到更多的头信息。


4、设置请求超时

好多时候各种原因,有可能导致你的请求各种等待。考验耐心的时候到了,不过这时可用通过设置urlopen 中的超时去干掉那些我们无法容忍的长时间没法响应的请求。

urlopen(url, data=None, timeout=<object object>)

使用timeout 的时候要注意的一点是,如果你没有data数据,那么这时你一定要显示的传递参数。

Example:

import urllib2
urllib2.urlopen('http://www.baidu.com',data,10)
urllib2.urlopen('http://www.baidu.com',timeout=10)


二、opener(OpenerDirector)


    The OpenerDirector manages a collection of Handler objects that do
    all the actual work.  Each Handler implements a particular protocol or
    option.  The OpenerDirector is a composite object that invokes the
    Handlers needed to open the requested URL.  For example, the
    HTTPHandler perfORMs HTTP GET and POST requests and deals with
    non-error returns.  The HTTPRedirectHandler automatically deals with
    HTTP 301, 302, 303 and 307 redirect errors, and the HTTPDigestAuthHandler
    deals with digest authentication


干嘛用的? 管理了一系列的handler 对象。我这这么理解的,其实我们在使用urlopen 的时候就已经存在了一个默认的handler 。只是对我们时透明的。我们可以使用这个handler做GET/POST 请求,但是如果我们想做一些其他的事情呢? 如我们想设置代理去做一些事情等所有非GET/POST能处理好的。那么我们就需要更换handler了 。这时就要使用opener ,这就时opener 所能干的。


1、设置代理

import urllib2
proxy_handler = urllib2.ProxyHandler({"http" : 'http://11.11.11.11:8080'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://xxx.xxx.xxxx')
response.read()


2、打开http 和 https 的 Debug log 功能

import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')

3、结合cookielib 处理 cookie 信息

首先要简单的了解一下cookielib 这个模块,功能还是很强大的。最好仔细研究一下

这里我们只研究 opener 相关,暂时略过cookielib 模块

import urllib2
import cookielib

cookie = cookielib.Cookiejar()
cookieHandler=urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(cookieHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
for item in cookie:
    print 'CookieName = '+item.name
    print 'CookieValue = '+item.value


三、异常处理URLError 和 HTTPError

HTTPError 是 URLError 的一个子类


        URLError
            HTTPError(URLError, urllib.addinfourl)

import urllib2
 
req = urllib2.Request('http://www.baidu.com/mmmaa')
try:
    urllib2.urlopen(req)
except urllib2.HTTPError, e:
    if hasattr(e,"code"):
        print e.code
except urllib2.URLError, e:
    if hasattr(e,"reason"):
        print e.reason
else:
    print "OK"


--结束END--

本文标题: Python 中的 urllib2 模块

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

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

猜你喜欢
  • Python 中的 urllib2 模块
    通过python 的 urllib2 模块,可以轻易的去模拟用户访问网页的行为。这里将自己的学习过程简单的记录下来。一、urlopen函数    urlopen(url, data=None) -- Basic usage is the s...
    99+
    2023-01-31
    模块 Python
  • 深入解析Python中的urllib2模块
    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库。这里总结了一些 urllib2 的使用细节。 Prox...
    99+
    2022-06-04
    模块 Python
  • Python网络编程中urllib2模块的用法总结
    一、最基础的应用 import urllib2 url = r'http://www.baidu.com' html = urllib2.urlopen(url).read() print html...
    99+
    2022-06-04
    网络编程 模块 Python
  • Python中urllib+urllib2+cookielib模块编写爬虫实战
    超文本传输协议http构成了万维网的基础,它利用URI(统一资源标识符)来识别Internet上的数据,而指定文档地址的URI被称为URL(既统一资源定位符),常见的URL指向文件、目录或者执行复杂任务的对...
    99+
    2022-06-04
    爬虫 实战 模块
  • 【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
    由于需要从某个网页上下载一些PDF文件,但是需要下载的PDF文件有几百个,所以不可能用人工点击来下载。正好Python有相关的模块,所以写了个程序来进行PDF文件的下载,顺便熟悉了Python的urllib...
    99+
    2022-06-04
    模块 批量 文件
  • Python中使用urllib2模块编写爬虫的简单上手示例
    提起python做网络爬虫就不得不说到强大的组件urllib2。在python中正是使用urllib2这个组件来抓取网页的。urllib2是Python的一个获取URLs(Uniform Resource ...
    99+
    2022-06-04
    爬虫 示例 上手
  • 使用Python的urllib2模块处理url和图片的技巧两则
    获取带有中文参数的url内容 对于中文的参数如果不进行编码的话,python的urllib2直接处理会报错,我们可以先将中文转换成utf- 8编码,然后使用urllib2.quote方法对参数进行url编码...
    99+
    2022-06-04
    模块 两则 技巧
  • 使用Python的urllib和urllib2模块制作爬虫的实例教程
    urllib 学习python完基础,有些迷茫.眼睛一闭,一种空白的窒息源源不断而来.还是缺少练习,遂拿爬虫来练练手.学习完斯巴达python爬虫课程后,将心得整理如下,供后续翻看.整篇笔记主要分以下几个部...
    99+
    2022-06-04
    爬虫 实例教程 模块
  • Python使用urllib2模块抓取HTML页面资源的实例分享
    先把要抓取的网络地址列在单独的list文件中 http://www.lsjlt.com/article/83440.html http://www.lsjlt.com/article/83437.ht...
    99+
    2022-06-04
    实例 模块 页面
  • Python中的sys模块、random模块和math模块
    一、sys运行时环境模块 sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。 用法: sys.argv:命令行参数List,第...
    99+
    2024-04-02
  • python中urllib2库使用
    1、Request函数   1)用法:urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])   2)作用:用于构造Request对象,可以传递d...
    99+
    2023-01-31
    python
  • python中的模块
    模块:随着程序变的越来越大  为了便于维护 需要把它分为多个文件 为此python允许把定义放入一个文件 然后在其他脚本中将其作为模块导入 创建模块: 将相关的语句和定义放入与模块同名的文件中 #file:module.py def num...
    99+
    2023-01-31
    模块 python
  • python中的sys模块和os模块
    目录1.sys模块2.os模块(和操作系统相关数据)1.sys模块 sys模块的常见函数列表: sys.argv: 实现从程序外部向程序传递参数。sys.exit([arg]): 程...
    99+
    2024-04-02
  • Python中的time模块和calendar模块
    目录1、时间戳2、时间元组3、获取当前时间4、格式化时间5、格式化日期6、获取CPU时间7、日历模块在Python中对时间和日期的处理方式有很多,其中转换日期是最常见的一个功能。Py...
    99+
    2024-04-02
  • python中的deque模块(collections的deque模块)
    目录 1. deque是python的collections中的一个类 2.deque的简单使用以及它的方法 2.1 创建deque的方法  2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及d...
    99+
    2023-09-25
    python 开发语言 collections deque 队列
  • Python中模块
    模块对我来说是什么        模块对我来说,感觉就像亲属或者朋友已经走过的路,他们已经趟过的浑水、掉过的坑、践行过的路线,全部提供给你,在你需要的时候请求帮助,借鉴他们的解决方法一样。都是为了方便走好人生路,用最短的路程走到成功的终...
    99+
    2023-01-31
    模块 Python
  • python中的zip模块
    目录1、引入模块2、ZipFile提供如下常用的方法和属性1、引入模块 import zipfile zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍...
    99+
    2022-06-10
    python zip模块
  • Python 中的 docx 模块
    Python 中的 docx 模块 本文介绍了 Python 中的 docx 模块,该模块可以用来创建、修改和读取 Microsoft Word 文档(.docx 文件)。本文包括以下内容: 什么是 ...
    99+
    2023-09-13
    python word
  • Python 中 os.path 模块的
    官网文档链接:   https://docs.python.org/3/library/os.path.html 概念:   该模块在路径名上实现了一些有用的功能,主要用于文件的属性获取 代码实现: os.path.abspath(pat...
    99+
    2023-01-30
    模块 Python os
  • python中的json模块
    json模块JSON就是JavaScript Object Notation,这个模块完成了python对象和JSON字符串的互相转换! json是一种很多语言支持的通用语言作用:如下,作为一个桥梁 在api接口中数据调用传输中常用php数...
    99+
    2023-01-31
    模块 python json
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作