《Python爬虫开发与项目实战》——1.5 网络编程

1.5 网络编程

  既然是做爬虫开发,必然需要了解Python网络编程方面的知识。计算机网络是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。例如当你使用浏览器访问谷歌网站时,你的计算机就和谷歌的某台服务器通过互联网建立起了连接,然后谷歌服务器会把把网页内容作为数据通过互联网传输到你的电脑上。
  网络编程对所有开发语言都是一样的,Python也不例外。使用Python进行网络编程时,实际上是在Python程序本身这个进程内,连接到指定服务器进程的通信端口进行通信,所以网络通信也可以看做两个进程间的通信。
  提到网络编程,必须提到的一个概念是Socket。Socket(套接字)是网络编程的一个抽象概念,通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。Python提供了两个基本的Socket模块:

  • Socket,提供了标准的BSD Sockets API。
  • SocketServer,提供了服务器中心类,可以简化网络服务器的开发。
      下面讲一下Socket模块功能。
      1.?Socket类型
      套接字格式为:socket(family,type[,protocal]),使用给定的地址族、套接字类型(如表1-2所示)、协议编号(默认为0)来创建套接字。

  2.?Socket函数
  表1-3列举了Python网络编程常用的函数,其中包括了TCP和UDP。

  本节接下来主要介绍Python中TCP和UDP两种网络类型的编程流程。
1.5.1 TCP编程
  网络编程一般包括两部分:服务端和客户端。TCP是一种面向连接的通信方式,主动发起连接的叫客户端,被动响应连接的叫服务端。首先说一下服务端,创建和运行TCP服务端一般需要五个步骤:
  1)创建Socket,绑定Socket到本地IP与端口。
  2)开始监听连接。
  3)进入循环,不断接收客户端的连接请求。
  4)接收传来的数据,并发送给对方数据。
  5)传输完毕后,关闭Socket。
  下面通过一个例子演示创建TCP服务端的过程,程序如下:

  接着编写客户端,与服务端进行交互,TCP客户端的创建和运行需要三个步骤:
  1)创建Socket,连接远端地址。
  2)连接后发送数据和接收数据。
  3)传输完毕后,关闭Socket。
  程序如下:

# coding:utf-8
     import socket
     # 初始化Socket
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     # 连接目标的IP和端口
     s.connect(('127.0.0.1', 9999))
     # 接收消息
     print('-->>'+s.recv(1024).decode('utf-8'))
     # 发送消息
     s.send(b'Hello,I am a client')
     print('-->>'+s.recv(1024).decode('utf-8'))
     s.send(b'exit')
     # 关闭Socket
     s.close()

  最后看一下运行结果,先启动服务端,再启动客户端。服务端打印的信息如下:

Waiting for connection...
     Accept new connection from 127.0.0.1:20164...
     -->>Hello,I am a client!
     Connection from 127.0.0.1:20164 closed.
  客户端输出信息如下:
     -->>Hello,I am server!
     -->>Loop_Msg: Hello,I am a client!

  以上完成了TCP客户端与服务端的交互流程,用TCP协议进行Socket编程在Python中十分简单。对于客户端,要主动连接服务器的IP和指定端口;对于服务器,要首先监听指定端口,然后,对每一个新的连接,创建一个线程或进程来处理。通常,服务器程序会无限运行下去。
1.5.2 UDP编程
  TCP通信需要一个建立可靠连接的过程,而且通信双方以流的形式发送数据。相对于TCP,UDP则是面向无连接的协议。使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包,但是不关心是否能到达目的端。虽然用UDP传输数据不可靠,但是由于它没有建立连接的过程,速度比TCP快得多,对于不要求可靠到达的数据,就可以使用UDP协议。
  使用UDP协议,和TCP一样,也有服务端和客户端之分。UDP编程相对于TCP编程比较简单,服务端创建和运行只需要三个步骤:
  1)创建Socket,绑定指定的IP和端口。
  2)直接发送数据和接收数据。
  3)关闭Socket。
  示例程序如下:

# coding:utf-8
     import socket
     # 创建Socket,绑定指定的IP和端口
     # SOCK_DGRAM指定了这个Socket的类型是UDP,绑定端口和TCP示例一样。
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     s.bind(('127.0.0.1', 9999))
     print('Bind UDP on 9999...')
     while True:
        # 直接发送数据和接收数据
        data, addr = s.recvfrom(1024)
        print('Received from %s:%s.' % addr)
        s.sendto(b'Hello, %s!' % data, addr)

  客户端的创建和运行更加简单,创建Socket,直接可以与服务端进行数据交换,示例如下:

# coding:utf-8
     import socket
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     for data in [b'Hello', b'World']:
        # 发送数据:
        s.sendto(data, ('127.0.0.1', 9999))
        # 接收数据:
        print(s.recv(1024).decode('utf-8'))
     s.close()

  以上就是UDP服务端和客户端数据交互的流程,UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,即UDP的9999端口与TCP的9999端口可以各自绑定。

时间: 2024-12-28 00:25:42

《Python爬虫开发与项目实战》——1.5 网络编程的相关文章

《Python爬虫开发与项目实战》——第2章 Web前端基础 2.1 W3C标准

第2章 Web前端基础 爬虫主要是和网页打交道,了解Web前端的知识是非常重要的.Web前端的知识范围非常广泛,不可能面面俱到和深入讲解,本章主要是抽取Web前端中和爬虫相关的知识点进行讲解,帮助读者了解这些必备的知识,为之后的Python爬虫开发打下基础. 2.1 W3C标准 如果说你只知道Web前端的一个标准,估计肯定是W3C标准了.W3C,即万维网联盟,是Web技术领域最具权威和影响力的国际中立性技术标准机构.万维网联盟(W3C)标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组

《Python爬虫开发与项目实战》——1.2 搭建开发环境

1.2 搭建开发环境 俗话说:"工欲善其事必先利其器",在做Python爬虫开发之前,一个好的IDE将会使编程效率得到大幅度提高.下面主要介绍两种IDE:Eclipse和PyCharm,并以在Windows 7上安装为例进行介绍.1.2.1 Eclipse+PyDev Eclipse是一个强大的编辑器,并通过插件的方式不断拓展功能.Eclipse比较常见的功能是编写Java程序,但是通过扩展PyDev插件,Eclipse就具有了编写Python程序的功能.所以本书搭建的开发环境是Ecl

《Python爬虫开发与项目实战》——3.2 HTTP请求的Python实现

3.2 HTTP请求的Python实现 通过上面的网络爬虫结构,我们可以看到读取URL.下载网页是每一个爬虫必备而且关键的功能,这就需要和HTTP请求打交道.接下来讲解Python中实现HTTP请求的三种方式:urllib2/urllib.httplib/urllib以及Requests.3.2.1 urllib2/urllib实现 urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅. 1.?首先实现一个完整的请求与响

《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

第3章 初识网络爬虫 从本章开始,将正式涉及Python爬虫的开发.本章主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫:另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力. 3.1 网络爬虫概述 本节正式进入Python爬虫开发的专题,接下来从网络爬虫的概念.用处与价值和结构等三个方面,让大家对网络爬虫有一个基本的了解.3.1.1 网络爬虫及其应用 随着网络的迅速发展,万维网成为大量信息的载体,如

《Python爬虫开发与项目实战》——2.2 HTTP标准

2.2 HTTP标准 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,减少网络传输.它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.之后的Python爬虫开发,主要就是和HTTP协议打交道.2.2.1 HTTP请求过程 HTTP协议采取的是请求响应模型,HTTP协议永远都是客户端发起请求,服务器回送响应.模型如图2-

《Python爬虫开发与项目实战》——1.6 小结

1.6 小结 本章主要讲解了Python的编程基础,包括IO编程.进程和线程.网络编程等三个方面.这三个方面在Python爬虫开发中经常用到,熟悉这些知识点,对于之后的开发将起到事半功倍的效果.如果对于Python编程基础不是很熟练,希望能将本章讲的三个知识点着重复习,将书中的例子灵活运用并加以改进.

《Python爬虫开发与项目实战》——2.3 小结

2.3 小结 本章主要讲解了Web前端中标记语言.脚本语言和HTTP的基本概念,在这些知识中,重点掌握HTML标记语言.XPath路径表达式的书写和HTTP请求流程,这对接下来的Python爬虫开发有着非常直接的作用,有助于爬虫开发的快速入门.本章讲解的只是Web前端的基础知识,希望大家有时间系统地学习Web前端的知识,这样对之后涉及协议分析和反爬虫措施的应对方面有很大帮助.

《Python爬虫开发与项目实战》——导读

前言 当你看前言的时候,不得不说你做出了一个聪明的选择,因为前言中有作者对整本书的概括和学习建议,这会对大家之后的阅读产生事半功倍的效果.在聊这本书之前.大家可以在Github中对不懂的内容进行提问,我会尽可能地帮助大家解决问题.其实在前言开头放这个链接是挺突兀的,不过确实是担心大家不会完整地看完前言. 接下来聊一聊这本书,写这本书的原因来自于我个人的微信公众号:七夜安全博客.我经常在博客园.知乎和微信平台上发布技术文章,分享一些知识和见解,有很多热心的朋友愿意和我进行交流讨论.记得2016年4

《Python爬虫开发与项目实战》——1.4 进程和线程

1.4 进程和线程 在爬虫开发中,进程和线程的概念是非常重要的.提高爬虫的工作效率,打造分布式爬虫,都离不开进程和线程的身影.本节将从多进程.多线程.协程和分布式进程等四个方面,帮助大家回顾Python语言中进程和线程中的常用操作,以便在接下来的爬虫开发中灵活运用进程和线程.1.4.1 多进程 Python实现多进程的方式主要有两种,一种方法是使用os模块中的fork方法,另一种方法是使用multiprocessing模块.这两种方法的区别在于前者仅适用于Unix/Linux操作系统,对Wind