python知识点结构(五)(5.3接口)5.3.4之网络编程(222-239)

一、模拟浏览器请求模块requests    

 1 #! /usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 
 4 import requests
 5 res = requests.get("http://www.weather.com.cn/weather/101020100.shtml")
 6 print (dir(res))
 7 res.encoding = 'utf-8'
 8 res_con = res.text
 9 #utf_res_con = str(res_con,encoding='utf-8')
10 #utf_res_con = res_con.encode()
11 fp = open('C:\praxml.xml','w')
12 fp.write(res_con)
13 fp.close()
View Code

扩展:url:三部分 a)协议 http,https,ftp,file(本地硬盘文件)+‘:’ +'//'+ b)服务器域名或是IP地址 包括端口号,比如http协议端口号默认为80 + c)资源的具体位置,目录和文件名

       URL是 互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL。

二、网站服务器返回内容为字符串(一切)

以xml形式解析。

扩展: 在读到xml文件打开时汉字出现乱码,在格式中选择以utf-8形式打开。

读取服务器返回值后,写入xml文件。正常写在文件中会隔一行一写,可能会导致解析错误,所以text.split('\n')

#! /usr/bin/env python
#-*- coding:utf-8 -*-

'''获取网页信息xml文件格式'''
import requests
res = requests.get("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=北京")
print (dir(res))
res.encoding = "utf-8"
res_con = res.text.split('\n')
print (res_con)
print (type(res_con))

fp = open('C:\praxml.xml','w')
for line in res_con:
    
    fp.write(line)
fp.close()

三、基于反射模拟web

1、正常思路:http://web.crtc.etiantian.com/ett20/study/ 当输入不同的目录名的时候,进入服务器的不同目录。在界面上也会显示不同的页面内容。

#-*- coding:utf-8 -*-
from web import webye
st = input('please input')
if st.endswith('study'):
    webye.studyye()
elif st.endswith('ins'):
    webye.insye()
else:
    print ("404")

注意:web模块与主函数必须在同一级目录下才能被调用,或者在site路径。

 2、一般情况

实际情况,上万个界面的情况下需要打开上万个对应的函数,所以使用反射来搜索调用网页函数。

#-*- coding:utf-8 -*-
from web import webye
st = input('please input')
stfunc = st.split('/')[-1]
print (stfunc)
if hasattr(webye,stfunc):
    stweb = getattr(webye,stfunc)
    stweb()
elif hasattr(webye,stfunc):
    insweb = getattr(webye,stfunc)
    insweb()
else:
    print ("404")

3、django框架的思想,利用反射调用指定的模块和函数。

#-*- coding:utf-8 -*-
st = input('please input')
stMod,stHan = st.split('/')[-2:]
ipeod = __import__('web'+'.'+stMod,fromlist = True)
if hasattr(ipeod,stHan):
    stweb = getattr(ipeod,stHan)
    stweb()
elif hasattr(ipeod,stHan):
    insweb = getattr(ipeod,stHan)
    insweb()
else:
    print ("404")

四、客户端请求的响应  

注意:客户端与服务器交互全部是字符串

#! /usr/bin/env python
#-*- coding:utf-8 -*-

'''获取网页信息xml文件格式'''
import requests
#http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=上海
res = requests.get("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=北京")
print (dir(res))
res.encoding = "utf-8"
res_con = res.text.split('\n')
#utf_res_con = str(res_con,encoding='utf-8')
#utf_res_con = res_con.encode()
print (res_con)
print (type(res_con))

fp = open('C:\praxml.xml','w')
for line in res_con:
    
    fp.write(line)
fp.close()

'''解析XML'''
#from xml.etree.ElementTree import ElementTree as ET
from xml.etree import ElementTree as ET
'''from xml.etree import ElementTree as ET   ElementTree是模块名 ,在其内也有一个类ElementTree,
当使用模块ElementTree.parse时,注意parse在模块中有这个函数,
而这个函数也是调用类ElementTree来实现解析。'''
print(1111111111111111)
tree = ET.parse('C:\praxml.xml')
print(1111111111111111111111111)
print ('type(tree) = ',type(tree))
root = tree.getroot()
print ('type(root) = ',type(root))

 注意既有ElementTree模块又有 ElementTree函数

ElementTree模块 有XML方法:专门负责解析XML,以字符串形式为入参。

                           parse方法:专门负责解析XML文件,文件名作为入参。

 

posted on 2016-06-26 15:22  lexn  阅读(90)  评论(0)    收藏  举报

导航