第3章计算机网络基础及数据获取 【实验目的】 (1) 了解Internet协议的基本含义,掌握计算机的IP地址设置方法。 (2) 掌握页面免费邮箱的申请过程,掌握如何修改电子邮箱的个人信息,掌握电子邮件的各项基本功能。 (3) 了解邮件的基本功能,掌握如何使用邮件完成多邮件的收发功能。 (4) 掌握Python网络爬虫requests库的使用。 (5) 掌握正则表达式的数据抽取方法。 (6) 掌握Python写入Excel的方法。 【实验环境】 中文Windows,Outlook 2016,Python 3。 【实验内容】 (1) 分别设置家中三台计算机的IP地址,使得这三台计算机能正常连接互联网。 (2) 免费电子邮箱的注册。 (3) 注册后个人信息的修改。 (4) 电子邮箱的基本功能使用。 (5) 邮件收发软件的使用。注册了好几个页面邮箱,但是每次都登录邮箱页面收发邮件很麻烦,可以通过设置不用打开网站就接收所需要的邮件。 (6) requests库的安装。 (7) 用requests库获取数据。 (8) 用正则表达式抽取数据。 实验3.1IP地址设置 IP地址是指Internet协议使用的地址。每个Internet服务提供商(ISP)须向有关组织申请一组IP地址,一般是将该组IP地址动态分配给其用户,当然用户也可以向ISP申请一个IP地址,这就是为什么在配置Windows 10的“网络”时,一般让系统自动分配IP地址,也可以手工设置。下面讲解设置IP地址的过程。 【实验要求】 (1) Internet协议基础知识。 (2) 自动获取IP地址。 (3) 手工设置IP地址。 【实验步骤】 (1) 打开资源管理器,右击“网络”,在弹出的快捷菜单中选择“属性”命令,如图31所示,进入“网络和共享中心”窗口,如图32所示。 图31右击“网络”再选择“属性”命令 图32“网络和共享中心”窗口 (2) 在图32所示窗口的左侧单击“更改适配器设置”,进入“网络连接”窗口,如图33所示,在该窗口中右击需要配置的网卡,在弹出的菜单中选择“属性”命令,弹出本地连接属性对话框,如图34所示,勾选“Internet协议版本4(TCP/IPv4)”复选框,单击“属性”按钮,进入IP地址的设置界面,如图35所示。 图33“网络连接”窗口 图34本地连接属性对话框 图35进入IP地址的设置界面 IP地址的获取有两种方式: 自动获取方式和手工设置方式。 如果想自动获取IP地址,也就是由系统自动分配IP地址,可以选择图35中的“自动获得IP地址”单选按钮。这种方式是系统根据当前连接网络段,自动分配对应的IP地址号码。采用这种自动获取的方式,IP地址的分配带有一定的随机性。 IP地址的随机自动获得方式是目前最主要的IP地址分配方式。这种方式为用户上网提供了极大的便利,使得网络配置不再困扰用户。但从管理的角度来看,手工设置固定IP地址的方式更有利于管理。选择图35中的“使用下面的IP地址”单选按钮,可以自行手工设置IP地址以及网关和DNS服务器。如图36所示,分别设置IP地址、子网掩码、默认网关、首选DNS服务器和备用DNS服务器等内容。 图36手工设置IP地址以及网关和DNS服务器 DNS服务器用于网络域名地址(也就是网址)与IP地址之间的转换,用户可以选择自动获取DNS服务器。 实验3.2注册免费邮箱 电子邮件是最早的网络应用之一,也是使用最为广泛的。电子邮件最早作为法律电子证据。它突破了时空的限制,大大地提高了办公的效率,为办公自动化、商业活动、公务活动等提供了极大的便利。 【实验要求】 掌握注册免费的Web页面邮箱。 【实验步骤】 (1) 打开IE浏览器,在地址栏中输入http://www.163.com,进入网易首页,如图37所示。 图37网易首页 (2) 单击“注册免费邮箱”按钮,进入网易首页的注册免费邮箱界面,如图38所示。 图38网易首页的注册免费邮箱界面 (3) 在图38中,有三种邮箱可供选择,其中“注册VIP邮箱”是需要付费的。这里选择的是“注册字母邮箱”。在图38中,带“*”的都是必填项目,输入要注册的邮件地址(也即邮箱地址)、密码、确认密码、手机号码(手机号码是为了收取短信验证码)、验证码以及短信验证码,单击“立即注册”按钮,即可完成注册流程。注册成功即可弹出注册成功的提示窗口。 (4) 如果该邮箱与其他邮箱关联(将现有的邮箱与其他邮箱建立关联,则无须重复登录,即可查看相应的收件信息)。 (5) 注册完成后,输入要登录的邮箱地址,如图39所示,输入密码,单击“登录”按钮,进入我的邮箱,如图310所示。网易邮箱主界面如图311所示。单击“设置”按钮,进入邮箱设置界面。“设置”菜单下的子菜单如图312所示,包括“常规设置”“邮箱密码修改”“账号与邮箱中心”“邮箱安全设置”“手机服务”“POP3/SMTP/IMAP”和“换肤”。 图39输入要登录的邮箱地址和密码 图310进入我的邮箱 图311网易邮箱主界面 图312“设置”菜单下的子菜单 “常规设置”包含的设置功能包括基本设置、自动回复/转发、发送邮件后设置、邮件撤回、写信设置、读信设置和其他设置。这些设置可以提高邮箱的管理。 “邮箱密码修改”可以修改邮箱的密码和密保问题(密保问题是在密码丢失的情况下通过回答问题找回密码的一种方式)。 “账号与邮箱中心”的功能如图313所示。 “多账户关联”是指在拥有多个网易邮箱的情况下,设置了多账户关联以后,只需要登录任一账号,即可登录关联的多个网易邮箱账户,方便用户使用。“邮箱中心”更是提供了对其他非网易邮箱的邮件的管理和迁移。“发件人管理”可以设置多个发件人,用户可根据需要确定发件人,如在发件时未指定,则自动填写的是默认发件人的信息。 图313“账号与邮箱中心”的功能 “邮箱安全设置”如图314所示。 “手机服务”如图315所示。这是基于现在社会智能手机应用的需求而提供的功能。 POP3/SMTP/IMAP设置如图316所示。POP3/SMTP/IMAP是邮件传输的常用协议,当我们使用第三方的邮件管理客户端,登录对应的邮箱账号时,需要开启POP3/SMTP/IMAP协议才可以登录,否则就会显示权限不足。 “换肤”菜单是对邮件背景颜色的管理。用户可根据个人喜好,选择设置不同风格的邮箱皮肤。“换肤”菜单提供“动态皮肤”“主题皮肤”和“基础皮肤”三种风格供用户选择。 图314邮箱安全设置 图315手机服务 图316POP3/SMTP/IMAP设置 实验3.3使用Windows 10的“邮件”功能收发电子邮件 【实验要求】 掌握基于Windows 10操作系统自带的一个客户端软件,用于处理邮件收发。 【实验步骤】 (1) 单击“开始”菜单,在弹出的程序列表中单击 “邮件”按钮,如图317所示。进入“邮件”界面,如图318所示。 图317单击“邮件”按钮 图318“邮件”界面 在界面上单击“账户”,即可打开“管理账户”功能,如图319所示。 图319管理账户 (2) 在图319所示的界面中单击“+添加账户”,弹出“添加账户”对话框,如图320所示。 图320“添加账户”对话框 (3) 如果有Google、Yahoo和iCloud的邮箱,直接单击相应名称即可进入设置; 如果是其他邮箱,则选择“其他账户POP,IMAP”。这里选择“其他账户POP,IMAP”。单击“其他账户POP,IMAP”进入下一步设置,如图321所示。 因为安全保护的问题,绝大部分的IMAP/POP3邮箱的电子邮件客户端的IMAP/POP3的功能都是关闭的,需要首先登录邮箱页面,开启这些功能以后,才能在“邮件”系统中完成该邮箱的收发功能。这里以网易邮箱为例展示如何设置。其他邮箱的设置方法大同小异。 下面依次解释POP3、SMTP和IMAP。 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件。 图321账户信息设置 SMTP 的全称是Simple Mail Transfer Protocol,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器就是遵循SMTP的发送邮件服务器。SMTP认证简单地说就是要求必须在提供了账户名和密码之后才可以登录SMTP服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加SMTP认证的目的是使用户避免受到垃圾邮件的侵扰。 IMAP的全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似的邮件访问标准协议之一。不同的是,开启IMAP后,用户在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如删除邮件、标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者从客户端软件登录邮箱,看到的邮件以及状态都是一致的。 网易163邮箱相关服务器信息如图322所示。 服务器名称服务器地址SSL协议端口号非SSL协议端口号 IMAPimap.163.com993143 SMTPsmtp.163.com465/99425 POP3pop.163.com995110 图322网易163邮箱相关服务器信息 IMAP和POP3的区别如下。 POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等)不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。 而IMAP提供Web邮箱与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。 同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让用户在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才做出是否下载的决定。此外,IMAP更好地支持了从多个不同设备中随时访问新邮件。 IMAP和POP3的区别如图323所示。 操作位置操作内容IMAPPOPS 收件箱阅读、标记、移动、删除邮件等客户端与邮箱更新同步仅客户端内 发件箱保存到已发送客户端与邮箱更新同步仅客户端内 创建文件夹新建自定义的文件夹客户端与邮箱更新同步仅客户端内 草稿保存草稿客户端与邮箱更新同步仅客户端内 垃圾文件夹接收误移入垃圾文件夹的邮件支持不支持 广告邮件接收被移入广告邮件夹的邮件支持不支持 图323IMAP和POP3的区别 总之,IMAP整体上为用户带来更为便捷和可靠的体验。POP3更易丢失邮件或多次下载相同的邮件,但IMAP通过邮件客户端与Web邮箱之间的双向同步功能很好地避免了这些问题。 注: 若在Web邮箱中设置了“保存到已发送”,使用客户端POP服务发信时,已发邮件也会自动同步到网页端“已发送”文件夹内。 为了邮箱安全,网易邮箱默认关闭IMAP服务,需要用户开启客户端协议以及授权码方可使用,如果需要开启可以通过以下方式开启。 登录网页邮箱,单击邮箱页面上方的“设置”按钮,选择POP3/SMTP/IMAP,根据实际需求开启IMAP/SMTP服务或者POP3/SMTP服务,如图324所示。开通后即可使用Foxmail、Outlook等第三方客户端进行收发邮件(注: 单击“关闭”按钮,即可关闭成功。) 图324根据实际需求开启IMAP/SMTP服务或者POP3/SMAP服务 设置完成后,返回图321所示的账户信息设置界面,输入相应的邮箱信息,就可以使用“邮件”客户端软件来收发邮件了。 实验3.4基于正则表达式获取中南财经政法大学教务部通知公告 【实验要求】 (1) 安装第三方库requests。 (2) 使用浏览器查看中南财经政法大学教务部的通知公告网站网页源代码。 (3) 通过正则表达式获取所有教务部通知的标题和发表日期。 (4) 将数据写入Excel文件。 【实验步骤】 (1) 安装Python第三方库requests。 在Windows环境下,单击左下角的“开始”菜单,选择“附件”→“命令提示符”命令,如图325所示。 图325选择“附件”→“命令提示符”命令 输入命令pip install requests,如图326所示。该状态需要联网,若出现requests successfully installed则表示安装成功; 如果安装失败则有可能是Python环境变量问题,需要重新安装Python。 图326输入命令pip install requests (2) 用浏览器打开中南财经政法大学教务部通知公告网页(http://jwc.zuel.edu.cn/5768/),如图327所示。 图327用浏览器打开中南财经政法大学教务部通知公告网页 在网页空白处右击,在弹出的快捷菜单中选择“查看网页源代码”命令,如图328所示。 图328在弹出的快捷菜单中选择“查看网页源代码”命令 (3) 查找需要获取的关键词,在网页源代码中搜索标题“欢迎关注中南财经政法大学教务部微信公众号”,找到该标题对应的源代码位置,如图329所示。 图329找到该标题对应的源代码位置 分析网页源代码,构建抽取模式。通过观察可以发现,标题“欢迎关注中南财经政法大学教务部微信公众号”的模式如图330所示。 源代码:target='_blank' title='欢迎关注中南财经政法大学教务部微信公众号'> 模式:target='_blank' title='(.*?)'>  代码:re.findall("target='_blank' title='(.*?)'>",webpage) 图330标题“欢迎关注中南财经政法大学教务部微信公众号”的模式 图330中的粗体字部分“欢迎关注中南财经政法大学教务部微信公众号”是需要从网页源代码中抽取的内容,只需要把粗体字部分替换为(.*?)就变成所需要的模式,最后在Python代码中使用re.findall("target='_blank' title='(.*?)>",webpage),会把webpage(HTML源代码)中所有满足模式条件的字符串以列表的形式返回。 同理,在网页源代码中搜索日期“20191203”,如图331所示。 图331在网页源代码中搜索日期“20191203” 通过观察可以发现,日期“20191203”的模式如图332所示。 源代码: 2019-12-03  模式: (.*?)  re.findall('(.*?)',webpage) 图332日期“20191203”的模式 图332中的粗体字部分“20191203”是需要从网页源代码中抽取的内容,只需要把粗体字部分替换为(.*?)就变成所需要的模式,最后在Python代码中使用re.findall('(.*?)',webpage), 会把webpage(HTML源代码)中所有满足模式条件的字符串以列表的形式返回。 获取中南财经政法大学教务部首页的标题和日期的完整代码如图333所示。 import re #引入正则库 import requests #引入requests库 url='http://jwc.zuel.edu.cn/5768/' #设置需要访问的URL网址 response=requests.get(url)#访问中南财经政法大学教务部通知公告网 response.encoding='utf-8'#设置编码格式为utf-8,防止乱码 webpage=response.text #webpage中获取网页源代码 titles=re.findall("target='_blank' title='(.*?)’>",webpage) #获取所有标题 dates=re.findall('(.*?)',webpage) #获取日期 for title in titles:#依次打印所有标题 print(title) for date in dates:#依次打印所有日期 print(date) 图333获取中南财经政法大学教务部首页的标题和日期的完整代码 为了能够获取所有的通知,实现自动翻页,观察每次翻页后网址的变化规律,如图334所示。 第1页:http://jwc.zuel.edu.cn/5768/list1.htm 第2页:http://jwc.zuel.edu.cn/5768/list2.htm … 第13页:http://jwc.zuel.edu.cn/5768/list13.htm 图334观察每次翻页后网址的变化规律 通过分析我们知道这些网址的前面都是http://jwc.zuel.edu.cn/5768/list,后面都是htm,只是中间的数字代表了页码,所以使用for循环连续生成翻页网址,如图335所示。 lefturl= "http://jwc.zuel.edu.cn/5768/list" righturl=".htm" for i in range(1,13+1): url=lefturl+str(i)+righturl print(url) 图335使用for循环连续生成翻页网址 这里通过for i in range(1,13+1)可以生成1~13的序列,通过url=lefturl+str(i)+righturl将URL通过加号拼接起来,形成完整的URL。通过翻页功能形成新的代码获得所有标题和日期,如图336所示。 import re #引入正则库 import requests #引入requests库 lefturl= "http://jwc.zuel.edu.cn/5768/list"#每页URL的左边部分 righturl=".htm"#每页URL的右边部分 for i in range(1,13+1):#让i形成1~13的序列 url=lefturl+str(i)+righturl#形成每页的URL response=requests.get(url)#访问中南财经政法大学教务部通知公告网 response.encoding='utf-8'#设置编码格式为utf-8,防止乱码 webpage=response.text #webpage中获取网页源代码 titles=re.findall("target='_blank' title='(.*?)'>",webpage) #获取所有标题 dates=re.findall('(.*?)',webpage) #获取日期 for title in titles:#依次打印所有标题 print(title) for date in dates:#依次打印所有日期 print(date) 图336通过翻页功能形成新的代码获得所有标题和日期 (4) 将数据写入Excel表: 为了将数据写入Excel,需要引入csv库。在操作Excel表格时,需要将Excel数据转换为一个二维列表,如图337所示。 标题1 日期1 标题2 日期2 标题3 日期3rows=[ ['标题1','日期1'], ['标题2','日期2'], ['标题3','日期3'] ] 图337将Excel数据转换为一个二维列表 在图337中的代码里,直接打印出来标题和日期,需要使用append()方法将其添加到列表中,于是定义两个新的空白列表titlelist和datelist,将循环中的title和date添加到列表中,如图338所示。 for title in titles:for title in titles: print(title)titlelist.append(title) for date in dates:for date in dates: print(date)datelist.append(date) 图338将循环中的title和date添加到列表中 需要将titlelist的每一个元素和datelist的每一个元素组队,形成图339的结构,需要通过zip()方法进行列表合并,如图339所示。 titlelist=[标题1,标题2,标题3…标题n] datelist=[日期1,日期2,日期3…日期n] ↓newlist=zip(titlelist,datelist) newlist=[(标题1,日期1),(标题2,日期2),….(标题n,日期n)] 图339通过zip()方法进行列表合并 新的列表形成之后,将其列表写入Excel,如图340所示。 file=open('download.csv','w',newline='') f_csv=csv.writer(file)#准备写入 f_csv.writerows(newlist)#写入数据 file.close()#关闭文件 图340将其列表写入Excel 在写入数据时,需要用open()函数建立一个csv文件并打开它,即file=open(' download.csv','w',newline=''),open()函数的第一个参数download.csv是需要打开的文件名字,第二个参数w代表以写入的方式打开文件,第三个参数newline="表示在行与行之间不需要空行。 获取标题和日期并写入Excel文件的完整代码如图341所示。 import re #引入正则库 import requests #引入requests库 import csv#引入csv库 lefturl= "http://jwc.zuel.edu.cn/5768/list"#每页URL的左边部分 righturl=".htm"#每页URL的右边部分 datelist=[]#用于存储所有日期的列表 titlelist=[]#用于存储所有标题的列表 for i in range(1,13+1):#让i形成1~13的序列 url=lefturl+str(i)+righturl#形成每页的URL response=requests.get(url)#访问中南财经政法大学教务部通知公告网 response.encoding='utf-8'#设置编码格式为utf-8,防止乱码 webpage=response.text #webpage中获取网页源代码 titles=re.findall("target='_blank' title='(.*?)'>",webpage) #获取所有标题 dates=re.findall('(.*?)',webpage) #获取日期 for title in titles:#将title加入列表 图341获取标题和日期并写入Excel文件的完整代码 titlelist.append(title) for date in dates:#将date添加到列表中 datelist.append(date) newlist=zip(titlelist,datelist)#为了写入Excel文件将列表合并 file=open('download.csv','w',newline='')#打开Excel文件 f_csv=csv.writer(file)#准备写入 f_csv.writerows(newlist)#写入数据 file.close()#关闭文件 print(len(titlelist),"条数据写入download.csv文件中") 图341(续) 该程序运行后会在当前目录下形成一个download的Excel文件,下载的download.csv的内容如图342所示。 图342下载的download.csv的内容