python访问web网页_python Web 客户端访问

http协议是我们日常都会接触的,在python中,有大量的模块供我们使用来编写Web和Http客户端。

其中urllib2模块中的HTTP是最常用的协议。

既然有urllib2模块,也就应该有urllib模块。这两个模块都提供了同样的基本功能,但urllib2的扩展性更好,并且有更多的内置特性。

1. 获取Web页面

先看代码:

importsys, urllib2

req= urllib2.Request(sys.argv[1])

fd=urllib2.urlopen(req)while 1:

data= fd.read(1024)if notlen(data):breaksys.stdout.write(data)

不得不说,python吸引我的地方就是这种简短的特性,仅仅几行代码就可以实现所需要的功能,并且扩展性更好,就像我前一阵子写的TCPUDP的服务端和客户端,已经向同事进行推广了。

首先,建立urllib2.Request对象,该对象用URL做参数,也可以设置其他参数,如 header。

当调用urlopen()的时候,对象被传进来,这样就得到一个文件对象。

下面是我获得的网页数据(就不提供源代码了,因为在本例中,获得的就是请求地址的源代码)

Example Web Page

You have reached this web page by typing "example.com",

"examle.net",

or "example.org" into you web browser.

These domain names are reserved for use in documentation

and are not available

for registration.SeeRFC

2606, Section 3.

下面是更新的代码,可以获得一些关于接收到的数据的其他细节:

importsys, urllib2

req= urllib2.Request(sys.argv[1])

fd=urllib2.urlopen(req)print "Retrieved", fd.geturl()

info=fd.info()for key, value ininfo.items():print "%s = %s" % (key, value)

下面是运行结果

使用geturl()得到的值与传入Request对象的值不一样,在结尾处有一条斜线。远程服务器做了一个HTTP的转向,urllib2可以跟随这个转向,其他行显示了HTTP header的信息。

2.认证

现在很多的网站都需要我们注册,由客户端向服务器发送一个用户名和密码。HTTP认证一般显示一个弹出窗口,来询问用户名和密码。它与基于cookie和from的认证是不同的。

先看代码:

importsys, urllib2, getpassclassPasswd(urllib2.HTTPPasswordMgr):deffind_user_password(self, realm, authuri):

retval=urllib2.HTTPPasswordMgr.find_user_password(self, realm, authuri)if retval[0] == None and retval[1] ==None:

sys.stdout.write("Login required for %s at %s\n" %(realm, authuri))

sys.stdout.write("Username:")

username=sys.stdin.readline().rstrip()

password=getpass.getpass().rstrip()return(username, password)else:returnretval

req= urllib2.Request(sys.argv[1])

opener=urllib2.build_opener(urllib2.HTTPBasicAuthHandler(Passwd()))

fd=opener.open(req)print "Received", fd.geturl()

info=fd.info()for key, value ininfo.items():print "%s = %s" % (key, value)

不过遗憾的是没有找到可以测试这个代码的网页。明天自己写一个需要验证的网页吧。

注: 我看的是PYTHON网络编程基础这本书,代码基本上都是书上的。作为自己的笔记吧。至少我自己敲过了,有点印象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值