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. Centos 7 安装 FFmpeg

    Step 1: Update the system sudo yum install epel-release -y sudo yum update -y sudo shutdown -r now S ...

  2. 转载:R语言rvest包使用

    R中有好几个包都可以抓取网页数据,但是rvest + CSS Selector最方便. 通过查看器立刻知道表格数据都在td:nth-child(1),td:nth-child(3)之类的节点中,直接代 ...

  3. 运行spark官方的graphx 示例 ComprehensiveExample.scala报错解决

    运行spark官方的graphx 示例 ComprehensiveExample.scala报错解决 在Idea中,直接运行ComprehensiveExample.scala,报需要指定master ...

  4. AbpZero之企业微信---登录(拓展第三方auth授权登录)---第一步:查看AbpZero的auth第三方登录的底层机制

    在AbpZero框架中,auth登录接口位于Web.Core库下的Controllers文件夹的TokenAuthController.cs的ExternalAuthenticate方法 Extern ...

  5. C语言 IPv6 十六进制 转 十进制

    #include <stdio.h> #include <string.h> #include <math.h> //ipv4地址转换 int ipv4_to_i( ...

  6. JQuery Mobile - 为什么绑定事件后会被多次执行?

    JQuery Mobile 在绑定事件时候,发现会被多次执行,为什么啊? 原来,jquery click  不是替换原有的function ,而是接着添加,所以才会执行次数越来越多,怎么办才能按需实现 ...

  7. Codeforces Round #439 (Div. 2) A B C

    强哉qls,这场div2竟是其出的!!! A. The Artful Expedient 暴力 ^ ,判断是否出现,有大佬根据亦或的性质推出 Karen 必赢,太强啦23333333333333. # ...

  8. Flask从入门到精通之跨站请求伪造保护

    默认情况下,Flask-WTF 能保护所有表单免受跨站请求伪造(Cross-Site Request Forgery,CSRF)的攻击.恶意网站把请求发送到被攻击者已登录的其他网站时就会引发CSRF ...

  9. java的几种定时任务

    本篇博文主要是讲述2.x 版本的quartz下的实现方案,1.x 版本的实现方式大致原理一致,但是具体的实现方式有些不一致,具体体现在获取  scheduler 这个类的方式上有些不同,这里不作过多的 ...

  10. vue 学前班003(生命周期)

    ue把整个生命周期划分为创建.挂载.更新.销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作.学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们 ...