Python网络编程 Http
"Foundations of Python Network Programming" written by John Goerzen
Python 中有urllib2和urllib两个模块来处理HTTP协议
GET方法把表单数据编码至URL。在请求页面之后,加上一个?,接着是表单数据。每个键和值对被&分隔。http://cn.bing.com/search?q=python+socket&go=&form=QBLH&filt=all&qs=n&sk=
就是一个搜索python socket例子
当需要交换大量数据的时候,应该用POST,数据以请求的一个单独部分发送,不过首先要确定的是服务器接收哪种请求,有些server接收两种。
Html中的实体表示正规的字符。例如:有个Html实体:&,表示"&"。当为了工作而显示HTML代码的时候,通常要把这些HTML实体转换成纯文本格式。当出现实体时,HTMLParser会调用handle_entityref()方法,如果不定义这个方法,实体就会被忽略掉。当出现一个实体的时候,代码检查实体是否可识别。如果可以,则转换为相应的值。否则,就使用输入流中的文字值。
HTML中还包含字符参考。他们包含字符的十进制数值,类似®。用来嵌入那些不能打印的字符,如:非英文的文档会包含某些特定字符的字符参考如注册商标。
作为第三方插件,Tidy库的接口如:mxTidy or uTidylib同样可以被使用,可以把html转换到xml,同时还可以纠正html中编码错误,如标签遗漏对应结束
# -*- coding:gb2312 -*-
importsys,urllib,urllib2
defaddGETdata(url,data):
"""Adds data to url. Data should be a list or tuple consisting of 2-itemlists or tuples of the form: (key, value).
Items that have no key should have key set to None.
A given key may occur more than once.
"""
returnurl+'?'+urllib.urlencode(data)
zipcode=sys.argv[1]
#http://www.wunderground.com/cgi-bin/findweather/getForecast?query=10001&wuSelect=WEATHER查询纽约天气的原始地址
url=addGETdata('http://www.wunderground.com/cgi-bin/findweather/getForecast',[('query',zipcode)])
url=url+'&wuSelect=WEATHER' #生成最终的url请求地址
print"Using URL",url
req=urllib2.Request(url)
fd=urllib2.urlopen(req)
while1:
data=fd.read(1024)
ifnotlen(data):
break
sys.stdout.write(data)
POST请求:
#!/usr/bin/env python
# -*- coding:gb2312 -*-
importsys,urllib,urllib2
zipcode=sys.argv[1]
#http://www.wunderground.com/cgi-bin/findweather/getForecast?query=10001&wuSelect=WEATHER the url for searching the weather of NewYork
url='http://www.wunderground.com/cgi-bin/findweather/getForecast'
data=urllib.urlencode([('query',zipcode),('wuSelect','WEATHER')])#对表单中键和值进行编码
printdata
req=urllib2.Request(url)
fd=urllib2.urlopen(req,data) #附加数据通过第二个参数传入
while1:
data=fd.read(1024)
ifnotlen(data):
break
sys.stdout.write(data)
Python 中有urllib2和urllib两个模块来处理HTTP协议
GET方法把表单数据编码至URL。在请求页面之后,加上一个?,接着是表单数据。每个键和值对被&分隔。http://cn.bing.com/search?q=python+socket&go=&form=QBLH&filt=all&qs=n&sk=
就是一个搜索python socket例子
当需要交换大量数据的时候,应该用POST,数据以请求的一个单独部分发送,不过首先要确定的是服务器接收哪种请求,有些server接收两种。
Html中的实体表示正规的字符。例如:有个Html实体:&,表示"&"。当为了工作而显示HTML代码的时候,通常要把这些HTML实体转换成纯文本格式。当出现实体时,HTMLParser会调用handle_entityref()方法,如果不定义这个方法,实体就会被忽略掉。当出现一个实体的时候,代码检查实体是否可识别。如果可以,则转换为相应的值。否则,就使用输入流中的文字值。
HTML中还包含字符参考。他们包含字符的十进制数值,类似®。用来嵌入那些不能打印的字符,如:非英文的文档会包含某些特定字符的字符参考如注册商标。
作为第三方插件,Tidy库的接口如:mxTidy or uTidylib同样可以被使用,可以把html转换到xml,同时还可以纠正html中编码错误,如标签遗漏对应结束
最简单的Http请求:
#!/usr/bin/env python
# -*- coding:gb2312 -*- #must in first or 2nd line
# Obtain web page
importsys,urllib2
file1=open("google.html","w")
ifnotfile1:
print"no file"
#print sys.argv[0] #程序名称
req=urllib2.Request(sys.argv[1])
try:
fd=urllib2.urlopen(req) #打开连接并得到一个文件类对象
excepturllib2.URLError,e:
print"Error retrieving data:",e
sys.exit(1)
print"Retrieved",fd.geturl()
info=fd.info() #http header info
forkey,valueininfo.items():
print"%s = %s"% (key,value)
#把下载的数据写入文件
while1:
data=fd.read(1024)
ifnotlen(data):
break
file1.write(data)
print'work done!'
Get请求:
# -*- coding:gb2312 -*-
importsys,urllib,urllib2
defaddGETdata(url,data):
"""Adds data to url. Data should be a list or tuple consisting of 2-itemlists or tuples of the form: (key, value).
Items that have no key should have key set to None.
A given key may occur more than once.
"""
returnurl+'?'+urllib.urlencode(data)
zipcode=sys.argv[1]
#http://www.wunderground.com/cgi-bin/findweather/getForecast?query=10001&wuSelect=WEATHER查询纽约天气的原始地址
url=addGETdata('http://www.wunderground.com/cgi-bin/findweather/getForecast',[('query',zipcode)])
url=url+'&wuSelect=WEATHER' #生成最终的url请求地址
print"Using URL",url
req=urllib2.Request(url)
fd=urllib2.urlopen(req)
while1:
data=fd.read(1024)
ifnotlen(data):
break
sys.stdout.write(data)
POST请求:
#!/usr/bin/env python
# -*- coding:gb2312 -*-
importsys,urllib,urllib2
zipcode=sys.argv[1]
#http://www.wunderground.com/cgi-bin/findweather/getForecast?query=10001&wuSelect=WEATHER the url for searching the weather of NewYork
url='http://www.wunderground.com/cgi-bin/findweather/getForecast'
data=urllib.urlencode([('query',zipcode),('wuSelect','WEATHER')])#对表单中键和值进行编码
printdata
req=urllib2.Request(url)
fd=urllib2.urlopen(req,data) #附加数据通过第二个参数传入
while1:
data=fd.read(1024)
ifnotlen(data):
break
sys.stdout.write(data)