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打开开发人员工具,通过工具我们梳理了以下规则:

  1. 博客块(div.day)

  2. 博客标题(div. postTitle a)

  3. 其他内容获取,如日期、博客链接、简介,这里我们就不截图了。

然后我们通过观察博客路径,获取到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爬网实战(二十二)相关推荐

  1. Docker最全教程之MySQL容器化 (二十五)

    前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过此块,本篇仅从笔者角度进行总结和编写. 目录 镜像说明  运行MySQL容器镜像  1.运行MySQL容器  ...

  2. Docker最全教程之MySQL容器化 (二十四)

    Docker最全教程之MySQL容器化 (二十四) 原文:Docker最全教程之MySQL容器化 (二十四) 前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过 ...

  3. Docker最全教程之Go实战,墙裂推荐(十九)

    前言 与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛低.本篇主要侧重于讲解了Go语言的优 ...

  4. Docker最全教程之Ubuntu下安装Docker(十五)

    前言 Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,应用很广.本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮 ...

  5. 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程

    Python 当前位置:主页 > 编程教程 > Python > 小甲鱼全套教程之Python系列视频教程 小甲鱼全套教程之Python系列视频教程 教程大小:   发布时间:201 ...

  6. python 技巧视频教程_扣丁学堂Python视频教程之Python开发技巧

    扣丁学堂Python视频教程之Python开发技巧 2018-07-25 14:09:44 808浏览 关于Python开发的技巧小编在上篇文章已经给大家分享过一些,本篇文章扣丁学堂 神秘eval: ...

  7. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

  8. 什么是python基础教程-python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...

  9. wince 开发_正运动技术运动控制卡应用开发教程之Python

    众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制. 今天正运动技术与大家分享一下运动控制卡应用开发教程之Pyth ...

最新文章

  1. Office Word 2019中找不到EndnoteX9的解决方案
  2. Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): singular fit encountered
  3. 【中国剩余定理】POJ 1006 HDU 1370 Biorhythms
  4. 玩转智能路由器-WRTnode开发板[接上网线]
  5. 《深度探索C++对象模型》--2 构造函数语意学
  6. linux下oracle安装
  7. SQL语句快速回忆——SQL基础知识点汇总
  8. 几款不错的VisualStudio2010插件
  9. 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
  10. [html] 页面刷新时sessionStroage会变(会清空)吗?
  11. cesium 局部加载_Cesium(四)常用代码总结
  12. 倒序数(信息学奥赛一本通-T1160)
  13. 【java笔记】基本类型与字符串之间的转换
  14. python中的模块_python3.0中重载模块
  15. 网站SEO优化--Flash站优化方法
  16. ftp列表错误或长城宽带连不上ftp的解决方法
  17. ADAS——高级驾驶辅助系统介绍
  18. 艾利特代理商—艾利特EC63机器人安装教程
  19. 什么是Activity?Activity的生命周期!
  20. 物体追踪实战:使用 OpenCV实现对指定颜色的物体追踪

热门文章

  1. 计算机网络udp实验时间戳请求报文与应答报文的表格填写,自考计算机网络管理历年(2007.1-2013.1)试题及答案(标有页码)...
  2. 甘特图看起来很生硬?教你使用智能颜色装饰你的甘特图!(二)
  3. 【前端芝士树】Javascript的原型与原型链
  4. Android Bootloader LittleKernel的两篇文章 【转】
  5. noi 4982 踩方格
  6. CSS- 横向和纵向时间轴
  7. 使用bat来运行cygwin,执行脚本(命令)
  8. javaBean【02】javaBean与表单应用
  9. Android之应用APN、WIFI、GPS定位小例子
  10. 一款强大的Kubernetes API流量查看神器