Docker最全教程——从理论到实战(十九)
Python目前是流行度增长最快的主流编程语言,也是第二大最受开发者喜爱的语言(参考Stack Overflow 2019开发者调查报告发布)。笔者建议.NET、Java开发人员可以将Python发展为第二语言,一方面Python在某些领域确实非常犀利(爬虫、算法、人工智能等等),另一方面,相信我,Python上手完全没有门槛,你甚至无需购买任何书籍!
由于近期在筹备4.21的长沙开发者大会,耽误了不少时间。不过这次邀请到了腾讯资深技术专家、.NET中国社区领袖,微软MVP张善友;52ABP开源框架的作者,微软MVP梁桐铭;知名技术类作家汪鹏,腾讯高级工程师卓伟,腾讯云高级产品经理胡李伟等等,有兴趣参加的朋友可以点击公众号菜单【联系我们】==>【报名】进行报名,技术不分语言,亦没有界限,期待和你分享、交流!
目录
关于Python
官方镜像
使用Python抓取博客列表
需求说明
了解Beautiful Soup
分析并获取抓取规则
编写代码实现抓取逻辑
编写Dockerfile
运行并查看抓取结果
关于Python
Python是一种计算机程序设计语言。是一种动态的、面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。Python目前是流行度增长最快的主流编程语言,也是第二大最受开发者喜爱的语言(参考Stack Overflow 2019开发者调查报告发布)。
Python是一种解释型脚本语言,可以应用于以下领域:
- Web 和 Internet开发
- 科学计算和统计
- 教育
- 桌面界面开发
- 软件开发
- 后端开发
Python学习起来没有门槛,但是通过它,你可以用更短的时间,更高的效率学习和掌握机器学习,甚至是深度学习的技能。不过单单只会Python对大多数人来说是不行的,你最好还掌握一门静态语言(.NET/Java)。同时,笔者也建议.NET、Java开发人员可以将Python发展为第二语言,一方面Python在某些领域确实非常犀利(爬虫、算法、人工智能等等),另一方面,相信我,Python上手完全没有门槛,你甚至无需购买任何书籍!
官方镜像
官方镜像地址:https://hub.docker.com/_/python
注意,请认准官方镜像:

使用Python抓取博客列表
需求说明
本篇使用Python来抓取我的博客园的博客列表,打印出标题、链接、日期和摘要。
博客地址:http://www.cnblogs.com/codelove/
内容如下所示:

了解Beautiful Soup
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,支持多种解析器。Beautiful Soup简单的说,就是一个灵活又方便的网页解析库,是一个爬网利器。本篇教程我们就基于Beautiful Soup来抓取博客数据。
Beautiful Soup官方网站:https://beautifulsoup.readthedocs.io
主要解析器说明:

分析并获取抓取规则
首先我们使用Chrome浏览器打开以下地址:http://www.cnblogs.com/codelove/
然后按下F12打开开发人员工具,通过工具我们梳理了以下规则:
- 博客块(div.day)

- 博客标题(div. postTitle a)

- 其他内容获取,如日期、博客链接、简介,这里我们就不截图了。
然后我们通过观察博客路径,获取到url分页规律:

根据以上分析,我们胸有成竹,开始编码。
编写代码实现抓取逻辑
在编码前,请阅读BeautifulSoup官方文档。然后根据需求,我们编写Python的代码如下所示:
# 关于BeautifulSoup,请阅读官方文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id52from bs4 import BeautifulSoupimport osimport sysimport requestsimport timeimport reurl = "https://www.cnblogs.com/codelove/default.html?page={page}" #已完成的页数序号,初时为0page = 0while True: page += 1 request_url = url.format(page=page) response = requests.get(request_url) #使用BeautifulSoup的html5lib解析器解析HTML(兼容性最好) html = BeautifulSoup(response.text,'html5lib') #获取当前HTML的所有的博客元素 blog_list = html.select(".forFlow .day") # 循环在读不到新的博客时结束 if not blog_list: break print("fetch: ", request_url) for blog in blog_list: # 获取标题 title = blog.select(".postTitle a")[0].string print('--------------------------'+title+'--------------------------'); # 获取博客链接 blog_url = blog.select(".postTitle a")[0]["href"] print(blog_url); # 获取博客日期 date = blog.select(".dayTitle a")[0].get_text() print(date) # 获取博客简介 des = blog.select(".postCon > div")[0].get_text() print(des) print('-------------------------------------------------------------------------------------'); |
如上述代码所示,我们根据分析的规则循环翻页并且从每一页的HTML中抽取出了我们需要的博客信息,并打印出来,相关代码已提供注释,这里我们就不多说了。
编写Dockerfile
代码写完,按照惯例,我们仍然是使用Docker实现本地无SDK开发,因此编写Dockerfile如下所示:
# 使用官方镜像FROM python:3.7-slim # 设置工作目录WORKDIR /app # 复制当前目录COPY . /app # 安装模块RUN pip install --trusted-host pypi.python.org -r requirements.txt # Run app.py when the container launchesCMD ["python", "app.py"] |
注意,由于我们使用到了比如beautifulsoup等第三方库,因此我们需要安装相关模块。requirements.txt内容如下所示(注意换行):
html5lib
beautifulsoup4
requests
运行并查看抓取结果
构建完成后,我们运行起来结果如下所示:

作者:雪雁
出处:http://www.cnblogs.com/codelove/
Docker最全教程——从理论到实战(十九)的更多相关文章
- Docker最全教程——从理论到实战(九)
使用Tencent Hub来完成CI 关于Tencent Hub Tencent Hub是腾讯出品的DevOps服务.主要提供多存储格式的版本管理,支持Docker Image.Binary.Helm ...
- Docker最全教程——从理论到实战(八)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- Docker最全教程——从理论到实战(七)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- Docker最全教程——从理论到实战(六)
托管到腾讯云容器服务 托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅. 自建还是托管? 在开始之前,我们先来讨论一个问题——是自建 ...
- Docker最全教程——从理论到实战(五)
往期内容链接 Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) 本篇教程持 ...
- Docker最全教程——从理论到实战
Docker最全教程——从理论到实战(一) Docker最全教程——从理论到实战(二) Docker最全教程——从理论到实战(三) Docker最全教程——从理论到实战(四) Docker最全教程—— ...
- Docker最全教程——从理论到实战(一)
容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解.心得和实践. 本篇教程持续编写了2个星期左右,只是为了大家更好地了解.理解和消化这个技术,能够搭上这波车. 你 ...
- Docker最全教程---从理论到实战
目录 前言 随着生产力的发展尤其是弹性架构的广泛应用(比如微服务),许多一流开发者都将应用托管到了应用容器上,比如Google.微软.亚马逊.腾讯.阿里.京东和新浪. 从未来的发展方向来看,容器引擎将 ...
- Docker最全教程——从理论到实战(二十二)
前言 最近正在抽时间编写k8s的相关教程,很是费时,等相关内容初步完成后,再和大家分享.对于k8s,还是上云更为简单.稳定并且节省成本,因此我们需要对主流云服务的容器服务进行了解,以便更好地应用于生产 ...
- Docker最全教程——从理论到实战(十五)
前言 Java是一门面向对象的优秀编程语言,市场占有率极高,但是在容器化实践过程中,发现官方支持并不友好,同时与其他编程语言的基础镜像相比(具体见各语言镜像比较),确实是非常臃肿. 本篇仅作探索,希望 ...
随机推荐
- CentOS7时区和时间设置
[root@saltstack-master ~]# timedatectl set-timezone Asia/Shanghai [root@saltstack-master ~]# ln -sf ...
- js垃圾回收与内存泄漏
js垃圾回收机制 概念: javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中的使用的内存.而在C和C++之类的语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况 ...
- cesium1.65api版本贴地贴模型标绘工具效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Android EditText不可编辑单行显示能滑动查看内容
遇到问题 有时为了节约界面控件,可以界面的美观,我们会使用单行显示 singleLine,如果使用 Enable = false 输入框文字呈现灰色,并且也无法操作. 想要实现的效果是,单行显示,不能 ...
- Flink知识散点
1.KeyBy 操作后,只有当 Key 的数量大于算子的并发实例数才能获得较好的计算性能. A.而若Key 的数量比实例数量少,就会导致部分实例收不到数据,这些实例就得不到执行,这些实例的计算能力得不 ...
- Python和Anoconda和Pycharm安装教程
简介 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. ...
- Are You Ready……Go?
Are You Ready……Go? 2019-11-01 12:03:10 Problem 你……到底有没有想好要干什么? 又是期中考试,又是CSP,怎么抉择? 未来太渺茫? 我不知道我到底想要什么 ...
- spring security之web应用安全
一.什么是web应用安全,为了安全我们要做哪些事情? 保护web资源不受侵害(资源:用户信息.用户财产.web数据信息等)对访问者的认证.授权,指定的用户才可以访问资源访问者的信息及操作得到保护(xs ...
- win10系统vscode c/c++配置环境
使用vscode可以完成轻量级的编译器环境搭建,使用vscode 搭建完整的c++开发环境见下网站: https://www.bilibili.com/video/av18436497/?spm_id ...
- 安装MongoDB到Ubuntu(APT)
运行环境 系统版本:Ubuntu 16.04.5 LTS 软件版本:mongodb-org-4.0.8 硬件要求:无 安装过程 1.配置APT-Mongodb存储库 ATP-Mongodb存储库由Mo ...