20212218林思凡《Python程序设计》实验四Python综合实验实验报告

课程:《Python程序设计》
班级: 2122
姓名: 林思凡
学号:20212218
实验教师:王志强
实验日期:2022年5月27日
必修/选修: 公选课

一、实验要求

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

二、实验内容

通过python网络爬虫在菜鸟编程www.runoob.com上爬取python编程100个实例,并转化为.py文件保存在华为云ECS云服务器。

三、实验灵感

作为大一新生,对各种高级语言掌握不够深入,经常通过CSDN、菜鸟编程等编程学习网站学习计算机语言,也会上各种oj平台等查看案例。突发奇想,若能将菜鸟编程已有的实例保存到本地,这样在无网络的情况下,也可以学习编程;恰好老师讲了python网络爬虫技术,便通过进一步深入学习做了一个爬虫程序。

四、实验过程及结果

1.观察网页

打开菜鸟编程的python实例页面,观察网页布局:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

观察到,实例1的网址为

https://www.runoob.com/python/python-exercise-example1.html

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

实例2的网址为

https://www.runoob.com/python/python-exercise-example2.html

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

比对网址,发现网址差别仅在example1和example2,可得出结论,实例网址的普遍规律为https://www.runoob.com/python/python-exercise-example _.html

可以运用此规律建立循环。

2.开始爬虫

首先导入模块requests, lxml,并按照上述规律设置基础网址:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

查找头部信息,在菜鸟网页按F12,点击网络查找所需的头部信息:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

创建getHTML()函数:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

代码说明:response = requests.get(url, headers=headers):构造一个向服务器请求资源的url对象。

etree.HTML(response.text):调用HTML类对HTML文本进行初始化,成功构造XPath解析对象,同时可以自动修正HMTL文本。

创建writepy()函数:

用途是将爬到的python实例信息写进文件里。

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

创建主函数main():

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

用一个for循环爬取实例1~实例100的html,在菜鸟网页通过DevTools观察网页元素

观察到,实例题目源代码:’div’,属性’id’ = ‘content’,并且属于第二个

标签

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

通过html.xpath()查找出对应的文本储存在content中,其中用@进行属性过滤。

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

用相同的方法,继续观察实例的代码部分:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

同样,通过规则查找对应的文本信息,储存在变量code中。joim()函数连接字符串。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串。

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

最后,将储存的content和code拼接起来,加入三个单边双引号”””注释,存储进变量all中,再通过writepy写进.py文件中。print语句会打印每个实例的标题(内容)。

然后执行程序。

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

完整源代码:

import requests
from lxml import etree

base_url = 'https://www.runoob.com/python/python-exercise-example%s.html'  # 网址含字符串

def getHTML(url):
    # 头文件
    headers = {
        'cookie': 'runoob-uuid=70f2092d-0778-4bac-baa0-206a5aaa4f83; _ga=GA1.2.145498080.1647779532; __gads=ID=c6ddf8b3b51e780a-222c5c9754d1007e:T=1647779531:RT=1647779531:S=ALNI_Maej_FxZL7RX4ee6sw9HNWGqvbm6w; Hm_lvt_3eec0b7da6548cf07db3bc477ea905ee=1651191230,1651795615,1652402950,1653623587; _gid=GA1.2.1602104606.1653623588; __gpi=UID=0000050ae7491e1d:T=1651017311:RT=1653623603:S=ALNI_MYvWoMsqiqr9Mnw1tt5ybWMRtcSrQ; Hm_lpvt_3eec0b7da6548cf07db3bc477ea905ee=1653623819; _gat_gtag_UA_84264393_2=1',
        'referer': 'https://www.runoob.com/python/python-100-examples.html',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }
    # 通过response=request.get(url)构造一个向服务器请求资源的url对象。
    response = requests.get(url, headers=headers)
    return etree.HTML(response.text)  # 文本类型
    # 调用HTML类对HTML文本进行初始化,成功构造XPath解析对象,同时自动修正HMTL文本

def writepy(i, text):
    # 用with open()来写,同时包含open()和close()
    with open('python实例%s.py' % i, 'w', encoding='utf-8') as file:
        file.write(text)  # 将变量text写入文件

def main():
    # 从1-100页的网址
    for i in range(1, 101):
        html = getHTML(base_url % i)
        content = f'题目{i}:\n' + \
            html.xpath('//div[@id="content"]/p[2]/text()')[0] + '\n'
        # 文本获取:用@符号进行属性过滤,此处表示匹配div下属性id为content的内容
        code = ''.join(html.xpath(
            '//div[@class="hl-main"]/span/text()')) + '\n'
        all = '"""\n' + content + code + '"""\n'
        writepy(i, all)
        print(content)

if __name__ == '__main__':
    main()

程序执行效果如下:

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

3.上传代码到华为云弹性云服务器ECS并运行

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

通过putty登录云服务器,创建文件夹pythonwork,通过winscp将程序拖到云服务器的文件夹里

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

接下来在云服务器上运行。

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

20212218林思凡《Python程序设计》实验四Python综合实验实验报告

实验结束。

五、实验过程中遇到的问题和解决过程

问题一:上完课,对网络爬虫一知半解

解决1:花了两天课余时间看网课,认真学习爬虫,为本项目打下基础。

问题二:不知道如何将网址

https://www.runoob.com/python/python-exercise-example1.html

https://www.runoob.com/python/python-exercise-example2.html

中的普遍规律和差异”1″ “2”体现在程序中

解决:上网查阅相关python字符串的表示方法,了解到有一种表示方法是’%s’%x,意思是将内容x填充到%s的地方,成功解决问题。

问题三:不知道如何获取头文件信息

解决3:上网查资料得,在爬取的网站界面按F12进入开发者工具DevTools,点击网络,再刷新页面,点击停止记录网络日志,点击最开始的网络活动,就可以看到所有的请求信息。

问题四:使用html.xpath()提取文本的时候发生错误

解决4:一处提取规则不规范,改正后正常运行。

问题五:无法在ECS服务器安装lxml

解决5:询问同学,得知云服务器python自带的系统pip安装不了,通过在云服务器执行命令

wget https://files.pythonhosted.org/packages/1a/04/d6f1159feaccdfc508517dba1929eb93a2854de729fa68da9d5c6b48fa00/setuptools-39.2.0.zip
unzip setuptools-39.2.0.zip
cd setuptools-39.2.0
python3 setup.py build
wget https://files.pythonhosted.org/packages/ae/e8/2340d46ecadb1692a1e455f13f75e596d4eab3d11a57446f08259dee8f02/pip-10.0.1.tar.gz
tar xf pip-10.0.1.tar.gz
cd pip-10.0.1
python3 setup.py install

成功安装pip,成功下载lxml。

六、参考资料

Python入门+数据分析_哔哩哔哩_bilibili

菜鸟之路–哦也的博客-CSDN博客_join()函数

IndexError: list index out of range 错误原理及解决方法(python)_于科技人文间徘徊的博客-CSDN博客

with open() as f:用法_何小智的博客-CSDN博客

python爬虫之xpath解析(附实战)_李富贵要上岸985的博客-CSDN博客_python xpath

python Request库的get()方法_星河呀的博客-CSDN博客_requests.get

lxml基本用法总结_kikay的博客-CSDN博客_lxml

七、课程小结

总体来说,python这门课,令我印象深刻,十分难忘。

Python是我接触到第一门的高级计算机语言,也是我目前最喜欢的计算机语言。相比C语言,python没有那么多繁重复杂、需要严格遵守的语法规则,不需要在程序开始时导入库函数,仅靠简简单单的缩进,就能将循环体、条件判断语句的内外部区分开来。另外,python还有强大无比的系统内置库和第三方外置库,只需要下载之后导入,就能享受到相比C语言无尽的便捷。毫无疑问,python现已成为主流的计算机编程语言。

我第一次接触python是在高考完的那个暑假。从繁重学业中解放出来的我,突然感觉到一阵空虚。为了不使自己的暑假一无所获,我买了图灵系列的python从入门到实践一书,而这也是我梦的开端。通过python,我逐渐学习数字、字符的表示,逐渐深入了解字符串(string)、列表(list)、元组(tuple)、字典(dictionary)和集合(set)五大数据结构类型。在我的同学们一起出门聚餐、开派对、游玩,享受高中最后的暑假的时候,我会因为弄懂for循环语句,理清函数的用法,明白类的意义,成功下载pygame并运行第一个python小游戏而欣喜不已,我的同学们也渐渐因为我了解他们不知道的知识,而投来羡慕的目光。就这样,这门神奇的语言陪伴了我度过高三暑假。

在准备选大一下学期的选修课的时候,我毫不犹豫地选修了王志强老师的python程序设计。到了课堂上我才愈发觉得人外有人、天外有天。python是一片海洋,而我只不过是在海边因为拾到几个贝壳而沾沾自喜的小孩子。我之前所学的知识,只不过是一点皮毛,基础中的基础罢了。老师在最后几次课中,在所学知识基础上做出了一定的拓展,不仅讲述了re模块正则表达式的应用,而且讲授了socket套接字,也就是应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯;而且讲述了网络爬虫,能够在短时间内爬取大量的网站资料。在跟着老师一步一步操作socket套接字,并且在自己创建的服务器端和客户端第一次成功实现对话的时候,我别提有多高兴了,但更多的是为python的强大所折服。这是我第一次见到python不仅能在本地运行无网络程序,更能连接两台主机,实现交互;在讲网络爬虫的时候,我更是震惊不已。在我以往的观念中,能写代码获取网站信息的都只是电影中无所不能的网络工程师,没想到利用python,竟然能够如此轻而易举地做成我想都不敢想的事情!在结课之后,为了完成本次大作业,我又花了三天左右的时间学习网络爬虫,抓住每一次下课的间隙,吸收着无尽的知识。渐渐地,我对爬虫的整个过程有了一定的了解,并在不断的查阅资料和咨询同学中,完成了本次大作业。当我自己写的程序运行成功之后,那种快乐是只有我自己能体会到的。

说起来,我对python掌握的东西还远远不够。虽然结课了,但是我还是会将对Python的热爱一直保存下去。感谢老师使我懂得,学习计算机语言,不能光啃书本,更要不停地操作实践。程序报错了不要灰心,仔细查找错误原因并加以改正,如此循环往复,在你成功运行程序的那一刻,你的个人水平也会得到很大的提高!

感谢老师的悉心指导!希望以后有机会还能选老师的计算机选修课!

Original: https://www.cnblogs.com/clarleslinnn/p/16319220.html
Author: 特别中二的文年同学
Title: 20212218林思凡《Python程序设计》实验四Python综合实验实验报告

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/712831/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis命令操作list 和redis命令操作set&sortedset

    redis命令操作list 列表类型 list:可以添加一个元素列表的头部(左边)或者尾部(右边) 添加: lpush key value:将元素加入列表左边 rpush key …

    技术杂谈 2023年6月21日
    0100
  • MySql主要性能指标说明

    在项目当中数据库一般都会成为主要的性能与负载瓶颈,那么针对数据库各项性能指标的监控与对应的优化是开发与运维人员需要面对的主要工作,而且这部分的工作会贯穿项目从开发到运行的整个周期里…

    技术杂谈 2023年7月25日
    056
  • 如何面向对象编程?程序员:我也要先有“对象”啊

    摘要:面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多组相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构。 如何面向”…

    技术杂谈 2023年5月31日
    0107
  • 基础设施公募REITs介绍

    一、REITs的发展历史 作为舶来品,REITs的发行和投资在海外市场已较为成熟,REITs也是大类资产配置中的重要品种。 在欧美的语境下,REITs即房地产信托投资基金,是通过汇…

    技术杂谈 2023年5月31日
    077
  • 【源码笔记】构建Spring源码环境

    IDEA构建Spring源码,不成功你来抓我 posted @2022-07-14 22:43 daheww 阅读(17 ) 评论() 编辑 Original: https://w…

    技术杂谈 2023年7月24日
    092
  • canvas/CSS仪表盘效果

    兼容写法: <span class="hljs-built_in">window.requestAnimFrame = (<span clas…

    技术杂谈 2023年5月31日
    086
  • OO第二单元总结

    OO第二单元电梯总结 OO第二单元电梯总结 架构模式 hw5 一级生产者消费者模型with策略类分离 关于策略类的提取: 关于优化实现了: hw6 增加了两个电梯子类的一级生产者消…

    技术杂谈 2023年7月25日
    065
  • 数据库的备份和恢复命令,使用视图,索引,事务

    备份库 直接在cmd窗口中直接输入,结束不需要输入; mysqldump -h端口号 -u用户名 -p密码 数据库名>备份地址 恢复库 在cmd窗口中进行 1、连接数据库 m…

    技术杂谈 2023年6月21日
    074
  • CRISPR Screening的应用

    2023年05月03日 参考: CRISPR Screen 操作解析:Nature 高分文章你也可以写 MAGeCK: 一款高效的CRISPR/Cas9 screen数据分析工具 …

    技术杂谈 2023年5月31日
    092
  • 使用easyExcel注意事项

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    093
  • 人工智能起步-反向回馈神经网路算法(BP算法)

    本文出处 人工智能分为强人工,弱人工。 弱人工智能就包括我们常用的语音识别,图像识别等,或者为了某一个固定目标实现的人工算法,如:下围棋,游戏的AI,聊天机器人,阿尔法狗等。 强人…

    技术杂谈 2023年6月21日
    0109
  • golang 笔记

    for循环,一个key在一个map中,则一直迭代 go总是使用值传递,但是有些数据类型是引用类型,比如map, pointer, channel, slice是部分引用类型 在给函…

    技术杂谈 2023年7月11日
    066
  • 为Jupyter notebook创建新kernel

    在新的虚拟环境中创建kernel 进入需要创建kernel的虚拟环境 conda activate pytorch 安装ipykernel ipykernel是必须安装的,也可以直…

    技术杂谈 2023年7月25日
    099
  • 运算符重载限制

    p387 5.表 11.1 中的大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。 =:赋值运算符。 ():函数调用运算符。 []:下标运算符…

    技术杂谈 2023年7月11日
    071
  • vuex中mapGetters的使用及简单实现原理

    一.项目中的mapGetters在Vue项目的开发过程中必然会使用到vuex,对vue项目公用数据进行管理,从而解决组件之间数据相互通信的问题,如果不使用vuex,那么一些非父子组…

    技术杂谈 2023年5月31日
    091
  • 统一的Json组件和csv下载组件

    Json组件 规范Json接口格式 Controller中一律返回 Java object,组件将自动转换数据格式,满足Json接口格式 统一处理Json接口中出现的异常,cont…

    技术杂谈 2023年6月1日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球