Python标准库之urllib,urllib2

news/2024/7/19 11:08:14 标签: python, 爬虫

urllib模块提供了一些高级接口,用于编写需要与HTTP服务器交互的客户端。典型的应用程序包括从网页抓取数据、自动化、代理、网页爬虫等。

在Python 2中,urllib功能分散在几个不同的库模块中,包括urllib、urllib2、urlparse等。在Python 3中,所有功能都合并在urllib包中。

1. urlopen(url[, data[, timeout]]) 

要抓取html网页,很简单

python">import urllib2
response=urllib2.urlopen('http://www.google.com')

    urlopen创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。参数url表示远程数据的路径,一般是网址。如果要执行更加复杂的操作,如修改HTTP报头,可创建Request实例并当为url参数使用;参数data表示以post方式提交到url的数

据,需要经过URL编码;timeout是可选的超时选项。urlopen返回 一个类文件对象,他提供了如下方法:

  • read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
  • info():返回一个mimetools.Message对象,表示远程服务器返回的头信息
  • getcode():返回整数形式的HTTP响应码。例如:成功时返回200,未找到文件时返回404
  • geturl():返回请求的实际url
python">>>> response.getcode()
200
>>> response.geturl()
'http://www.google.com.hk/'

  info()返回的mimetools.Message映射对象有headers、getheader()、getplist() 、getparam()等方法。

python">message=response.info()
message.headers  #返回http报头信息的列表
for header in message:
    print header,message.getheader(header)  #获取报头信息
for header in message:
    print header,message[header]     #message可用字典的方法分析
message.getparam('charset')  #获取url编码

2. URL编码 urllib.urlencode()

urllib中还提供了一些方法,用于对url进行编码、解码。url中是不能出现一些特殊的符号的,有些符号有特殊的用途。

urllib.quote()

使用适合URL内容的转义序列替换string中的特殊字符。字母、数字、下划线(_)、逗号(,)、句号(.)、连字符(-)都保持不变。其他字符转换成%xx形式的转义序列,默认使用utf-8编码。

urllib.unquote()

解码

urllib.urlencode(query)

将query中的查询值转换成一个URL编码的字符串。query可以是一个字典,也可以是一个(key,value)的对序列。得到的是以'&'字符分割的'key=value'对序列。

python">import urllib
form_data={'user':'jhon','passwd':'123456'}  #要提交的表单数据
url_data=urllib.urlencode(form_data)    #url_data被编码为'passwd=123456&user=jhon'
full_url='http://www.example.com'+'?'+url_data
u=urllib2.urlopen(full_url) 

 3. urllib2.Request(url [, data [, headers ]])

Request实例可以替代urlopen(url)中的url来实现更加复杂的操作。headers是一个字典,包含了可表示HTTP报头内容的键值映射。

有一些网站不希望被某些程序浏览或者针对不同的浏览器返回不同的版本。默认情况下,urlib2把自己识别为Python-urllib/x.y(这里的 xy是python发行版的主要或次要的版本号,如,

Python-urllib/2.7)。浏览器区别自身的方式是通过User-Agent头如果要模拟chrome浏览器连接:

python">headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36'}
r=urllib2.Request("http://www.google.com",headers=headers)
u=urllib2.urlopen(r)

 要处理cookie的时候,注意不要在Request里面设置headers,因为cookie也在headers里面,设置headers会将cookie覆盖掉。

 可以用Request().add_header(key,value)方法。

python">import urllib2
import cookielib
cookie=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
r=urllib2.Request('http://www.google.com')
r.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36')
u=opener.open(r)

  

转载于:https://www.cnblogs.com/linxiyue/p/3537486.html


http://www.niftyadmin.cn/n/1069740.html

相关文章

VR全景的未来

冬天来了,春季还会远吗? 这可能是支撑着诸多VR创业者坚持的最有力的一句话 自2017年至今,经历了短暂的爆发后,又进入了缓冲期 直至2019年,5G的出现又将VR带入了进入了我们的视野 尽管人们最关心的还是5G手机,可是…

各浏览器对innerHTML的读写权限的差异

IE6 IE7 IE8 浏览器中对 APPLET、AREA、BR、COL、COLGROUP、FRAME、HEAD、HR、HTML、IFRAME、 IMG、INPUT、ISINDEX、META、NOFRAMES、NOSCRIPT、OBJECT、PARAM、SCRIPT、STYLE、 TABLE、TBODY、TFOOT、THEAD、TITLE、TR 元素设置 innerHTML 属性时会抛异常。IE6 对 ABBR 元素设…

Java 中的异常处理4(待补充)

日志 Logging 为了取代System.out.println();可以设置输出样式可以设置输出级别,禁止某些级别输出可以被重定向到文件可以按包名控制日志级别 package wensong.com; import java.util.logging.Level; import java.util.logging.Logger;public class TestLooging {p…

关于 二维数组指针

概括的说,指针其实就是可变数组的首地址,说是可变数组,是 指其包含内容的数量的可变的,并且是可动态申请和释放的,从而充 分节约宝贵的内存资源。我一向喜欢一维数组,除非万不得已,我一 般是不用…

Text Editor (word processor) Design 资料整理

Text Editor Design 资料整理 Design and Implementation of a Win32 Text Editor The Craft of Text Editing, or Emacs for the Modern World, by Craig A. Finseth. PDF Here! Data Structures for Text Sequences, by Charles Crowley. PDF Here! ned – Text Editor of th…

互联网+VR全景

VR全景技术,颠覆“互联网技术”新时期的新型技术,其通过全景制作软件将数张不一样视角的平面图进行拼接,最后转换成720度全方位展现的三维全景图。 全景图不仅能够在显示屏上进行展现,也能通过虚拟现实技术设备(VR眼镜、一体头盔…

Java 枚举enum 学习笔记(自己写的判断年龄的一段代码,待补充)

其实写的时候一知半解,慢慢摸索,有很大的优化空间,慢慢学习回来再修改,欢迎提出建议谢谢 package wensong.com; /*** 学习了一点枚举知识之后自己尝试写了这段代码* 要求用户键盘输入出生年月和今天的年月然后输出年龄天数等一些…

VR全景简介

VR全景又称三维全景,是一种采用单反相机对实际情景进行全方位环顾拍摄后进行拼接并制作的3D全景图。 随着电子信息技术的发展,多媒体所包括的类型也越来越多,表现的方式也层出不穷,而一些传统式的表现方式已不能满足用户的观看需…