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()
扩展: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文件,文件名作为入参。
浙公网安备 33010602011771号