保定网站维护公司,罗湖网站建设公司乐云seo,天翼云免费服务器,wordpress 3.9 性能目录
基本的网络知识
TCP/IP
IP地址
端口
HTTP/HTTPS
HTTP
HTTPS
搭建自己的Web服务器
urllib.request模块
发送GET请求
发送POST请求
JSON数据
JSON文档的结构
JSON数据的解码
下载图片示例
返回所有备忘录信息 此文章讲解如何通过Python访问互联网上的资源这也是网络爬虫技术的基础。
基本的网络知识
TCP/IP
在网络通信中会用到一些相关协议其中TCP/IP是非常重要的协议由IP和TCP两个协议构成。IPInternet Protocol是一种低级的路由协议它将数据拆分在许多小的数据包中并通过网络将它们发送到某一特定地址但无法保证所有包都抵达目的地也不能保证包按顺序抵达。
由于通过IP传输数据存在不安全性所以还需要通过TCPTransmi ssion Control Protocol传输控制协议进行网络通信。TCP是一种高层次的协议是面向连接的可靠数据传输协议如果有些数据包没被收到则会重发对数据包的内容准确性进行检查并保证数据包按顺序抵达 。所以TCP能够保证数据包安全地按照发送时的顺序送达目的地。
IP地址
为了实现网络中不同计算机之间的通信每台计算机都必须有一个与众不同的标识这就是IP地址TCP/IP使用IP地址来标识源地址和目的地址。
最初所有的IP地址都是由32位数字构成的由4个8位的二进制数组成每8位之间用圆点隔开例如192.168.1.1这种类型的地址通过IPv4指定。现在有一种新的地址模式叫作IPv6IPv6使用128位数字表示一个地址。尽管IPv6比IPv4有很多优势但是由于习惯的问题很多设备还是采用IPv4。
另外我们有时还会用到一个特殊的IP地址127.0.0.1127.0.0.1叫作回送地址指本机。回送地址主要用于网络软件测试及本机的进程间通信只发送数据只进行本机进程间通信不进行任何网络传输。
端口
一个IP地址标识一台计算机每一台计算机又有很多网络通信程序在运行提供网络服务或进行通信这就需要不同的端口进行通信。如果把IP地址比作电话号码那么端口就是分机号码在进行网络通信时不仅要指定IP地址还要指定端口号。
TCP/IP系统中的端口号是一个16位的数字它的范围是065535 。将小于1024的端口号保留给预定义的服务例如HTTP是80FTP是21Telnet是23Email是25等等。除非要和那些服务进行通信否则不应该使用小于1024的端口。
HTTP/HTTPS
对互联网的访问大多基于HTTP/HTTPSHTTP/HTTPS是TCP/IP的一种协议。
HTTP
HTTPHypertext Transfer Protocol超文本传输协议属于应用层协议其简捷、快速的方式适用于分布式超文本信息传输。HTTP是无连接协议即在每一次请求时都建立连接服务器在处理完客户端的请求后会先应答客户端然后断开连接不会一直占用网络资源。
HTTP/1.1共定义了8种请求方法OPTIONS、HEAD、GET、POST 、PUT、DELETE、TRACE和CONNECT。GET和POST方法最常用。
1GET方法用于向指定的资源发出请求被发送的信息“显式” 地跟在URL后面。它一般只用于读取数据例如静态图片等。GET方法有点像使用明信片给别人写信将“信的内容”写在外面接触到的人都可以看到因此是不安全的。
2POST方法用于向指定的资源提交数据请求服务器进行处理 例如提交表单或者上传文件等。数据被包含在请求体中。POST方法像是把“信的内容”装入信封中接触到该信封的人都看不到信的内容 因此是相对安全的。
HTTPS
HTTPSHypertext Transfer Protocol Secure超文本传输安全协议 是超文本传输协议和SSL的组合用于提供加密通信及对网络服务器身份的鉴定。简单地说HTTPS是加密的HTTP。
HTTPS与HTTP的区别是HTTPS使用https//代替http//HTTPS使用端口443而HTTP使用端口80与TCP/IP通信。
搭建自己的Web服务器
搭建Web服务器的步骤如下。
1安装JDKJava开发工具包
我们的Web服务器是Apache Tomcat是支持Java Web技术的Web服务器。Apache Tomcat的运行需要Java运行环境而JDK提供了Java运行环境因此我们首先需要安装JDK。
2配置Java运行环境
Apache Tomcat在运行时需要用到JAVA_HOME环境变量因此需要先设置JAVA_HOME环境变量。
首先打开Windows系统环境变量设置对话框打开该对话框有很多方式如果是Windows 10系统则在桌面上用鼠标右键单击“此电脑”图标弹出Windows系统对话框之后如下图所示操作。 3安装Apache Tomcat服务器
官网下载Apache Tomcat安装包apache-tom cat-9.0.13.zip并解压即可安装Apache Tom cat服务器。
4启动Apache Tomcat服务器
在Apache Tomcat解压目录的bin目录下找到startup.bat文件双击sta rtup.bat即可启动Apache Tomcat。
启动Apache Tomcat成功后会看到如下信息。 5测试Apache Tomcat服务器
打开浏览器在地址栏中输入http//localhost8080/NoteWebService/在打开的页面上介绍了当前Web服务器已经安装的Web应用Note WebService的具体使用方法。 打开浏览器在地址栏中输入网址http//localhost8080/NoteWeb Service/note.do在打开的页面上可以查询所有数据。 注意NoteWebService可以查询、插入、删除和修改note备忘录信息备忘录信息有4个字段CDate日期、Content内容、UserlD用户ID和ID备忘录ID
urllib.request模块
我们要想在Python中访问互联网资源则可以使用官方内置的urllib .request模块。
发送GET请求
如果要发送HTTP/HTTPS的GET请求则可以使用urllib.request模块的Request对象。
示例代码如下
import urllib.request
urlhttp://localhost:8080/NoteWebService/note.do?actionqueryID10 # 请求URL网址URL中后的内容是请求参数多个参数之间以分隔actionquery是一对参数action是参数名query是参数值
requrllib.request.Request(url) # 创建Request对象默认是GET请求
with urllib.request.urlopen(req) as response: # 发送网络请求response是需要释放的对象可以使用with as代码块管理和释放dataresponse.read() # 读取数据为字节序列数据json_datadata.decode() # 将字节序列数据转换为字符串print(json_data)
发送POST请求
如果要发送HTTP/HTTPS的POST请求则其发送流程与发送GET请求非常类似。
示例代码如下
import urllib.request
urlhttp://localhost:8080/NoteWebService/note.do
# 准备HTTP参数
params_dict{action:query,ID:10} # 准备将参数放到字典中
params_strurllib.parse.urlencode(params_dict) # 将字符参数有转换为字符串形式为actionqueryID10
print(params_str)
# 字符串转换为字节序列对象
params_bytesparams_str.encode() # 发送POST请求时的参数要以字节序列形式发送
requrllib.request.Request(url,dataparams_bytes) # 发送POST请求
with urllib.request.urlopen(req) as response: # 发送网络请求response是需要释放的对象可以使用with as代码块管理和释放dataresponse.read() # 读取数据为字节序列数据json_datadata.decode() # 将字节序列数据转换为字符串print(json_data)
JSON数据
JSON文档的结构
构成JSON文档的两种结构为JSON对象object和JSON数组array。
在JSON对象和JSON数组中都有JSON数值JSON数值有字符串、数字、true、false、null、对象或数组。true和false是布尔值null表示空的对象而且对象和数组可以嵌套。
1JSON对象
JSON对象类似于Python中的字典类型示例如下
{ # 使用大括号括起来name:a.htm, # 名称需要使用双括号括起来JSON数值“名称-值”对size:345,saved:true
}
2JSON数组
JSON数组类似于Python中的列表类型示例如下
[ # 使用中括号括起来text,html,css # JSON数值
]
JSON数据的解码
JSON数据的解码decode指将JSON数据转换为Python数据当从网络中接收或从磁盘中读取JSON数据时需要将其解码为Python数据。
在编码过程中JSON数据被转换为Python数据。 我们使用json模块提供的loadsstr函数进行JSON数据的解码参数str是JSON字符串返回Python数据。
重构前面的示例代码如下
import urllib.request
import json
urlhttp://localhost:8080/NoteWebService/note.do?actionqueryID10 # 网络资源地址
requrllib.request.Request(url)
with urllib.request.Request(req) as response:dataresponse.read()json_datadata.decode()print(JSON字符串,json_data)py_dictjson.loads(json_data) # 解码JSON字符串返回字典print(备忘录ID,py_dict[ID])print(备忘录日期,py_dict[CDate])print(备忘录内容,py_dict[Content])print(用户ID,py_dict[UserID])
下载图片示例
从服务器返回的数据除了字符串也能返回其他类型的数据下面给一个下载图片示例。
import urllib.request
urlhttp://localhost:8080/NoteWebService/logo.png # 网络资源地址
requrllib.request.Request(url)
with urllib.request.Request(url) as response:dataresponse.read()f_namedownload.png # 下载后的文件名with open(f_name,wb) as f: # 以写入方式打开二进制文件f.write(data)print(下载文件成功)
在文件下载成功后会在当前目录下看到download.png文件。
返回所有备忘录信息 参考代码如下
import urllib.request
import json
urlhttp://localhost:8080/NoteWebService/note.do # 网络资源地址
requrllib.request.Request(url)
with urllib.request.Request(req) as response:dataresponse.read()json_datadata.decode()py_dictjson.loads(json_data)# 返回所有的备忘录记录信息record_arraypy_dict[Record] # record_array是JSON数组for record_obj in record_array: # 遍历所有备忘录信息print(--------备忘录记录--------)print(备忘录ID,record_obj[ID])print(备忘录日期,record_obj[CDate])print(备忘录内容,record_obj[Content])print(用户ID,record_obj[UserID])