博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python urllib简单使用
阅读量:6281 次
发布时间:2019-06-22

本文共 2074 字,大约阅读时间需要 6 分钟。

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 urllib2response = urllib2.urlopen('http://python.org/')html = response.read()print(html)

使用POST发送参数前需要先将参数编码:

import urllibimport urllib2values = {    '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 urllibimport urllib2url = '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)

参考资料:

转载地址:http://wyiva.baihongyu.com/

你可能感兴趣的文章
光伏制造业“融资难、融资贵”问题亟待破解
查看>>
Java Mail最基本的发送邮件例子
查看>>
《HTML 5与CSS 3 权威指南(第3版·上册)》——2.3 新增的属性和废除的属性
查看>>
《Total Commander:万能文件管理器》——第3.5节.选择文件
查看>>
《日志管理与分析权威指南》一导读
查看>>
去 TMD 互联网思维,性价比而已
查看>>
如何手动删除Oracle 11g数据库
查看>>
懒人促进社会进步 - 5种索引的原理和优化Case (btree,hash,gin,gist,brin)
查看>>
《深入实践Spring Boot》一3.4 视图设计
查看>>
《设计模式解析(第2版•修订版)》目录—导读
查看>>
《Web前端开发精品课 HTML与CSS进阶教程》——2.2 标题语义化
查看>>
Java核心技术卷I基础知识3.5.3 强制类型转换
查看>>
可与Mirai比肩的恶意程序Hajime,竟是为了保护IoT设备?
查看>>
《Spring Data 官方文档》6. Cassandra 存储库
查看>>
聊聊并发(十)生产者消费者模式
查看>>
R语言数据挖掘2.2.4.2 FP-growth算法
查看>>
人工智能概念诞生60年,哪些大牛堪称“一代宗师”?
查看>>
《游戏大师Chris Crawford谈互动叙事》一9.5 真实案例
查看>>
Mybatis与Spring整合连接MySQL
查看>>
GCC知识
查看>>