python标准库urllib2使用细节

2024-02-11 16:18

本文主要是介绍python标准库urllib2使用细节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

urllib2下载网页方法:

1、最简洁的方法

response = urllib2.urlopen('http://www.baidu.com')

print response.getcode()

cont = response.read()

2、添加data、http header

request = urllib2.Request(url)

//添加数据

request.add_data('a', '1')

request.add_header('User-Agent', 'Mozilla/5.0')

response = urllib2.urlopen(request)

3、添加特殊情景的处理器

例如HTTPCookieProcessor,ProxyHandler,HTTPSHandler,HTTPRedirectHandler

然后 opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

urllib2.urlopen(url)


python有哪几种网页解析器:

正则表达式,html.parser,Beautiful Soup,lxml


1、Proxy的设置

urllib2默认会使用环境变量http_proxy来设置HTTP Proxy。如果想在程序中明确控制Proxy 而不受环境变量的影响,可以使用如下方式:

import urllib2enable_proxy=True
proxy_handler = urllib2.ProxyHandler({"http":'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})if enable_proxy:opener = urllib2.build_opener(proxy_handler)
else:opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

2、Timeout的设置

response = urllib2.urlopen('http://www.google.com', timeout=10)

3、在HTTP Request中加入特定的Header

要加入header,需要使用Request对象

url = 'http:www.baidu.com'
response = urllib2.urlopen('http://www.google.com', timeout=10)
request = urllib2.Request(url)
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)

对有些header要特别留意,服务器会针对这些header做检查。

User-Agent:有些服务器或Proxy会通过该值来判断是否是浏览器发出的请求

Content-Type:在使用REST接口时,服务器会检查该值,用来确定HTTP Body中的内容该怎样解析。常见的取值有:


4、Redict

urllib2默认情况下回针对HTTP 3XX返回码自动进行redict动作,无需人工配置。

如果不想自动redict,除了使用更低层次的httplib库之外,还可以自定义HTTPRedictHandler类

class RedictHandler(urllib2.HTTPRedirectHandler):def http_error_301(self, req, fp, code, msg, headers):passdef http_error_302(self, req, fp, code, msg, headers):pass
opener = urllib2.build_opener(RedictHandler)
opener.open('http://www.baidu.com')

5、cookie

URLlib2对Cookie的处理也是自动的。如果需要得到某个Cookie项的值,可以这么做:

import cookielib
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open('http://www.baidu.com')
for item in cookie:if item.name == 'some_cookie_item_name':print item.value

6、使用HTTP的PUT和DELETE方法

urllib2只支持HTTP的GET和POST方法,如果要使用HTTP PUT和DELETE方法,只能使用比较底层的httplib库。虽然如此,也能通过下面的方式,使urllib2能够发出PUT或DELETE请求

request = urllib2.Request(url, data=data)
request.get_method = lambda: 'PUT' # or DELETE
response = urllib2.urlopen(request)

7、得到HTTP的返回码

对于200 OK来说,只要使用urlopen返回的response对象的getcode()方法就可以得到HTTP的返回码。但对其他的返回码来说,urlopen会抛出异常。这时候,就要检查异常对象的code属性了。


try:response = urllib2.urlopen('http"restrict.web.com')
except urllib2.HTTPError, e:print e.code

8、Debug Log

使用urllib时,可以通过下面的方式把debug log打开,这样收发的包内容就会在屏幕上打印出来。

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')


URLError可能产生的原因:

1、网络无法连接

2、连接不到特定的服务器

3、服务器不存在


HTTPError是URLError的子类。

HTTPError实例产生后会有一个code属性,这就是服务器发送的相关错误号

因为urllib2可以处理重定向,也就是3开头的代号可以被处理,并且100-299范围的号码指示成功,所以只能看到400-599的错误代码


为什么要使用Cookie呢?

Cookie,指某些网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据(通常经过加密)

当获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面都是使用默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout

如果需要Cookie,只使用这个opener是不能达到目的的。需要创建更一般的opener来实现对Cookie的设置。

cookielib模块的主要作用是提供可存储cookie的对象,以便于urllib2模块配合使用来访问Internet资源。Coookielib模块非常强大,可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如实现模拟登陆功能。

//保存cookie到变量中

#声明一个CookieJar对象实例保存cookie    
cookie = cookielib.CookieJar()
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:print 'Name = '+item.nameprint 'Value = '+item.value

//保存cookie到文件中,需要用到FileCookieJar对象,在这里使用它的子类MozillaCookieJar来实现保存CookieJar

#保存到文件中
filename = 'cookie.txt'
cookie = cookielib.MozillaCookieJar(filename)
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

ignore_discard的意思是:即使cookies将被丢弃也将它保存下来

ignore_expires的意思是:如果在该文件中cookies已经存在,则覆盖文件写入。


现在已经把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站。





这篇关于python标准库urllib2使用细节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700239

相关文章

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum