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爬虫入门六之Cookie的使用

urllib module doc

urllib2 module doc

Python urllib简单使用的更多相关文章

  1. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  2. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  3. Python 实现简单的 Web

    简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...

  4. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  5. python开启简单webserver

    python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...

  6. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  7. python urllib模块的urlopen()的使用方法及实例

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 一.urllib模块urlopen()函数: urlopen(url, data=N ...

  8. python使用简单http协议来传送文件

    python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...

  9. Python超简单的HTTP服务器

    Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...

随机推荐

  1. 项目笔记---事半功倍之GhostDoc(二)

    前言 前一篇文章<项目笔记---事半功倍之StyleCop(一)>提到如何约束代码,规范代码风格,这一节,我们将了解如何快速生成符合规则的代码注释---GhostDoc 一.安装Ghost ...

  2. AOP编程的学习总结

    前几天听到一个同事说起AOP 然后就想学习下应用到项目中去,自己也是在网上找了很多的资料,之后发现 网上的大部分资料的内容几乎都是如出一撤,于是自己就整理了一下再加上这几天的学习总结到的知识写到这篇文 ...

  3. 如何连接MSSQLSERVER2014(其他版本数据库大体相同)

    购买了服务器后我在上面安装了SqlServer2014,但是程序中总是远程连接不上,特此记录一下: 一.一些基本设置如下链接: 转载自:https://blog.sun0816.com/20381.h ...

  4. VS未能正确加载 ”Microsoft.VisualStudio.Editor.Implementation.EditorPackate“包错误解决方法

    很久没用VS了,打开后出现未能正确加载 ”Microsoft.VisualStudio.Editor.Implementation.EditorPackate“包的错误,经过一番上网查阅错误得以解决. ...

  5. C#多线程编程系列(二)- 线程基础

    目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 ...

  6. 如何使用socket进行java网络编程(一)

    笔者进来遇到一个项目,一家公司的系统需要在完成自身业务逻辑的同时,接入到某银行的核心系统(这里准确说应该是前置机)进行一系列的账务处理,然后再将账务处理结果返回给该公司系统. 网络通信采用TCP协议. ...

  7. Android 导入 aar 库文件

    1. 在需要导入 aar 的 module 目录下创建一个名叫 "aars" 的目录,并把 aar 文件复制到这里. 2. 在项目的 build.gradle 文件里添加 allp ...

  8. Django分页设置

    1. """ 分页组件使用示例: obj = Pagination(request.GET.get('page',1),len(USER_LIST),request.pa ...

  9. OSX - 可以安装任何程序!

    在shell里面执行命令: sudo spctl --master-disable 参考: https://www.jianshu.com/p/010cc30228f3

  10. Elasticsearch java API (23)查询 DSL Geo查询

    地理查询编辑 Elasticsearch支持两种类型的地理数据: geo_point纬度/经度对字段的支持,和 geo_shape领域,支持点.线.圆.多边形.多等. 这组查询: geo_shape  ...