Python urllib简单使用
Python的urllib和urllib2模块都做与请求URL相关的操作。
它们最显著的差异为:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能.
python 2.7.x提供了urllib与urllib2,鉴于上述异同两个库通常搭配使用。
urlopen
urllib2.urlopen(url, *data, *timeout)
urlopen方法是urllib2模块最常用的方法,用于访问发送某一请求。
url参数可以是一个字符串url或者是一个Request对象。
可选参数timeout用于设置超时时间,以秒为单位。
如果没有指定,将使用设置的全局默认timeout值。
urlopen使用默认opener进行访问, 为阻塞式IO.
如果请求成功,函数将返回响应。
在data为None时默认用GET方法:
import urllib2
response = urllib2.urlopen('http://python.org/')
html = response.read()
print(html)
使用POST发送参数前需要先将参数编码:
import urllib
import urllib2
values = {
'action': 'sign-in',
'username': 'finley',
'password': '1234'
}
values = urllib.urlencode(values)
response = urllib2.urlopen('http://127.0.0.1:8080/game', values)
print(response.read())
urllib.urlencode不能直接进行Unicode编码,需要先进行转码:
urllib.urlencode (u'bl'.encode('utf-8'))
qutoe与urlencode均可以进行编码,区别在于quote的空格由%20替代而urlencode的空格由+替代。
Request
使用Request对象可以设置更多请求参数:
Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
url: url字符串
data:额外发送的数据
在data为None时默认用GET方法提交,有参数时默认用POST方法提交
示例:
import urllib
import urllib2
url = 'http://127.0.0.1:8080/game'
values = {
'action': 'sign-in',
'username': 'finley',
'password': '1234'
}
data = urllib.urlencode(values)
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
html = response.read()
cookie
为了使用cookie我们需要一个opener对象来维护cookiejar.
class BaseDriver:
def __init__(self):
self.opener = None
self.cookiejar = None
self.initOpener()
def initOpener(self):
self.cookiejar = cookielib.CookieJar()
self.opener = urllib2.build_opener(
urllib2.HTTPCookieProcessor(self.cookiejar)
)
def get_cookie(self):
for cookie in self.cookiejar:
if cookie.name == 'csrftoken':
return cookie.value
return None
def doRequest(self, action, values):
data = urllib.urlencode(values)
request = urllib2.Request(url, data)
return self.opener.open(request)
参考资料:
urllib与urllib2的学习总结(python2.7.X)
Python urllib简单使用的更多相关文章
- Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...
- Python 利用Python编写简单网络爬虫实例2
利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...
- Python 实现简单的 Web
简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...
- 用 python实现简单EXCEL数据统计
任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...
- python开启简单webserver
python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...
- Python开发简单爬虫 - 慕课网
课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序 课程目录 第1章 课程介绍 ...
- python urllib模块的urlopen()的使用方法及实例
Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlopen()函数: urlopen(url, data=N ...
- python使用简单http协议来传送文件
python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...
- Python超简单的HTTP服务器
Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...
随机推荐
- 一起学习MVC(2)Global.asax的学习
在Global.asax.cs文件中 protected void Application_BeginRequest(Object sender, EventArgs e) { ...
- 疑难杂症--SQL SERVER 2012下数据库内存异常回收
--=================================================================== --背景: 在一台SQL SERVER 2012 SP1(1 ...
- java 执行sql文件
# 背景 用例执行完毕,期望回滚数据,因此希望执行sql来回滚数据 # 步骤 直接show代码,借助的是mybatis的ScriptRunner /** * 执行xx库下的表备份脚本 * * @par ...
- AbpZero后台模块化(1)
AbpZero的精髓就在于多租户模块化加载,如果不做到这两种的话,就没必要使用这个框架. 1.首先,我们得新建一个类库,用于存放我们写的业务代码. 在类库下分别建立三个类文件:TestAp ...
- 一个简单的QQ隐藏图生成算法
隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天思考了一下,发现挺有趣的,所以自己 ...
- 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构
本篇承接上篇内容,如果你不小心点击进来,建议重新从第一篇开始完整阅读. 构建NetCore应用框架之实战篇索引 一.BitAdminCore框架简介 从前篇论述我们知道,我们接下来将要去做一个管理系统 ...
- SQL语句中的TOP(expression) [PERCENT] [WITH TIES] 用法
TOP(expression) [PERCENT] [WITH TIES] expression : 指定返回行数的数值表达式.如果指定了PERCENT,则expression默认转换为FLOAT值, ...
- Python面向对象(成员修饰符)
day25 成员修饰符 class Foo: def __init__(self, name, age): self.name = name self.__age = age#私有,外部无法直接访问 ...
- 【JavaScript】call和apply区别及使用方法
一.方法的定义call方法: 语法:fun.call(thisArg[, arg1[, arg2[, ...]]])定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来 ...
- vue 学前班001(基础概念)
1 学习目标 通过这一节,你会学会: 1.目前前端技术使用的趋势 2.什么是MVVM 3.Vue.js的两大核心 4.Vue.js的适用场景 诞生背景 近几年来,得益于手机设备的普及和性能的提升, ...