Docker最全教程之Python爬网实战(二十二)
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/#id52
from bs4 import BeautifulSoup
import os
import sys
import requests
import time
import re
url = "https://www.cnblogs.com/codelove/default.html?page={page}"
#已完成的页数序号,初时为0
page = 0
whileTrue:
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")
# 循环在读不到新的博客时结束
ifnot blog_list:
break
print("fetch:", request_url)
for blog in blog_list:
# 获取标题
title = blog.select(".postTitlea")[0].string
print('--------------------------'+title+'--------------------------');
# 获取博客链接
blog_url = blog.select(".postTitlea")[0]["href"]
print(blog_url);
# 获取博客日期
date = blog.select(".dayTitlea")[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 whenthe container launches
CMD ["python", "app.py"]
注意,由于我们使用到了比如beautifulsoup等第三方库,因此我们需要安装相关模块。requirements.txt内容如下所示(注意换行):
html5lib
beautifulsoup4
requests
运行并查看抓取结果
构建完成后,我们运行起来结果如下所示:
| 往期内容 |
Docker最全教程——从理论到实战(一)
Docker最全教程——从理论到实战(二)
Docker最全教程——从理论到实战(三)
Docker最全教程——从理论到实战(四)
Docker最全教程——从理论到实战(五)
Docker最全教程——从理论到实战(六)
Docker最全教程——从理论到实战(七)
Docker最全教程——从理论到实战(八)
Docker最全教程——从理论到实战(九)
Docker最全教程之使用Tencent Hub来完成CI(十)
Docker最全教程——数据库容器化(十一)
Docker最全教程——数据库容器化之持久保存数据(十二)
Docker最全教程——MongoDB容器化(十三)
Docker最全教程——Redis容器化以及排行榜实战(十四)
Docker最全教程之Ubuntu下安装Docker(十五)
Docker最全教程之树莓派和Docker(十六)
Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)
Docker最全教程之使用Docker搭建Java开发环境(十八)
Docker最全教程之Go实战,墙裂推荐(十九)
Docker最全教程之使用.NET Core推送钉钉消息(二十)
Docker最全教程之使用 Visual Studio Code玩转Docker(二十一)
转载是一种动力 分享是一种美德
如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
QQ群:
编程交流群<85318032>
产品交流群<897857351>
Docker最全教程之Python爬网实战(二十二)相关推荐
- Docker最全教程之MySQL容器化 (二十五)
前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过此块,本篇仅从笔者角度进行总结和编写. 目录 镜像说明 运行MySQL容器镜像 1.运行MySQL容器 ...
- Docker最全教程之MySQL容器化 (二十四)
Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...
- Docker最全教程之Go实战,墙裂推荐(十九)
前言 与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛低.本篇主要侧重于讲解了Go语言的优 ...
- Docker最全教程之Ubuntu下安装Docker(十五)
前言 Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,应用很广.本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮 ...
- 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程
Python 当前位置:主页 > 编程教程 > Python > 小甲鱼全套教程之Python系列视频教程 小甲鱼全套教程之Python系列视频教程 教程大小: 发布时间:201 ...
- python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧
扣丁学堂Python视频教程之Python开发技巧 2018-07-25 14:09:44 808浏览 关于Python开发的技巧小编在上篇文章已经给大家分享过一些,本篇文章扣丁学堂 神秘eval: ...
- Python培训教程之Python基础知识点梳理
Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...
- 什么是python基础教程-python基础教程之python是什么?概念解析
Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...
- wince 开发_正运动技术运动控制卡应用开发教程之Python
众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制. 今天正运动技术与大家分享一下运动控制卡应用开发教程之Pyth ...
最新文章
- Office Word 2019中找不到EndnoteX9的解决方案
- Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): singular fit encountered
- 【中国剩余定理】POJ 1006 HDU 1370 Biorhythms
- 玩转智能路由器-WRTnode开发板[接上网线]
- 《深度探索C++对象模型》--2 构造函数语意学
- linux下oracle安装
- SQL语句快速回忆——SQL基础知识点汇总
- 几款不错的VisualStudio2010插件
- 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
- [html] 页面刷新时sessionStroage会变(会清空)吗?
- cesium 局部加载_Cesium(四)常用代码总结
- 倒序数(信息学奥赛一本通-T1160)
- 【java笔记】基本类型与字符串之间的转换
- python中的模块_python3.0中重载模块
- 网站SEO优化--Flash站优化方法
- ftp列表错误或长城宽带连不上ftp的解决方法
- ADAS——高级驾驶辅助系统介绍
- 艾利特代理商—艾利特EC63机器人安装教程
- 什么是Activity?Activity的生命周期!
- 物体追踪实战:使用 OpenCV实现对指定颜色的物体追踪
热门文章
- 计算机网络udp实验时间戳请求报文与应答报文的表格填写,自考计算机网络管理历年(2007.1-2013.1)试题及答案(标有页码)...
- 甘特图看起来很生硬?教你使用智能颜色装饰你的甘特图!(二)
- 【前端芝士树】Javascript的原型与原型链
- Android Bootloader LittleKernel的两篇文章 【转】
- noi 4982 踩方格
- CSS- 横向和纵向时间轴
- 使用bat来运行cygwin,执行脚本(命令)
- javaBean【02】javaBean与表单应用
- Android之应用APN、WIFI、GPS定位小例子
- 一款强大的Kubernetes API流量查看神器