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的代码如下所示:

  1. # 关于BeautifulSoup,请阅读官方文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id52
  2.  
  3. from bs4 import BeautifulSoup
  4.  
  5. import os
  6.  
  7. import sys
  8.  
  9. import requests
  10.  
  11. import time
  12.  
  13. import re
  14.  
  15. url = "https://www.cnblogs.com/codelove/default.html?page={page}"
  16.  
  17. #已完成的页数序号,初时为0
  18.  
  19. page = 0
  20.  
  21. while True:
  22.  
  23. page += 1
  24.  
  25. request_url = url.format(page=page)
  26.  
  27. response = requests.get(request_url)
  28.  
  29. #使用BeautifulSoup的html5lib解析器解析HTML(兼容性最好)
  30.  
  31. html = BeautifulSoup(response.text,'html5lib')
  32.  
  33. #获取当前HTML的所有的博客元素
  34.  
  35. blog_list = html.select(".forFlow .day")
  36.  
  37. # 循环在读不到新的博客时结束
  38.  
  39. if not blog_list:
  40.  
  41. break
  42.  
  43. print("fetch: ", request_url)
  44.  
  45. for blog in blog_list:
  46.  
  47. # 获取标题
  48.  
  49. title = blog.select(".postTitle a")[0].string
  50.  
  51. print('--------------------------'+title+'--------------------------');
  52.  
  53. # 获取博客链接
  54.  
  55. blog_url = blog.select(".postTitle a")[0]["href"]
  56.  
  57. print(blog_url);
  58.  
  59. # 获取博客日期
  60.  
  61. date = blog.select(".dayTitle a")[0].get_text()
  62.  
  63. print(date)
  64.  
  65. # 获取博客简介
  66.  
  67. des = blog.select(".postCon > div")[0].get_text()
  68.  
  69. print(des)
  70.  
  71. print('-------------------------------------------------------------------------------------');

  

如上述代码所示,我们根据分析的规则循环翻页并且从每一页的HTML中抽取出了我们需要的博客信息,并打印出来,相关代码已提供注释,这里我们就不多说了。

编写Dockerfile

代码写完,按照惯例,我们仍然是使用Docker实现本地无SDK开发,因此编写Dockerfile如下所示:

  1. # 使用官方镜像
  2.  
  3. FROM python:3.7-slim
  4.  
  5. # 设置工作目录
  6.  
  7. WORKDIR /app
  8.  
  9. # 复制当前目录
  10.  
  11. COPY . /app
  12.  
  13. # 安装模块
  14.  
  15. RUN pip install --trusted-host pypi.python.org -r requirements.txt
  16.  
  17. # Run app.py when the container launches
  18.  
  19. CMD ["python", "app.py"]

  

注意,由于我们使用到了比如beautifulsoup等第三方库,因此我们需要安装相关模块。requirements.txt内容如下所示(注意换行):

html5lib

beautifulsoup4

requests

运行并查看抓取结果

构建完成后,我们运行起来结果如下所示:

Docker最全教程之Python爬网实战(二十一)的更多相关文章

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

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

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

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

  3. Docker最全教程之Ubuntu下安装Docker(十四)

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

  4. Python爬网获取全国各地律师电话号

    [本文出自天外归云的博客园] 从64365网站获取全国各地律师电话号,用到了python的lxml库进行对html页面内容的解析,对于xpath的获取和正确性校验,需要在火狐浏览器安装firebug和 ...

  5. Python爬网——获取安卓手机统计数据

    [本文出自天外归云的博客园] 1. 在安卓网上对热门机型进行爬网,取前五十: # -*- coding: utf-8 -*- import requests,re from bs4 import Be ...

  6. 学习廖雪峰的Python教程之Python基础

    一.缩进 编译器或者解释器就是负责把符合语法的程序代码转换成CPU能够执行的机器码,然后执行. 以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释.其他每一行都是一个语句,当语句 ...

  7. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  8. go语言开发教程之web项目开发实战

    Golang介绍Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件 ...

  9. Web攻防系列教程之 Cookie注入攻防实战

    摘要:随着网络安全技术的发展,SQL注入作为一种很流行的攻击方式被越来越多的人所知晓.很多网站也都对SQL注入做了防护,许多网站管理员的做法就是添加一个防注入程序.这时我们用常规的手段去探测网站的SQ ...

随机推荐

  1. 拿到月薪30K,必选一些Python好书!

    论述: Python是所有编程语言中与人工智能最紧密相连的编程语言,阿尔法狗都在使用的 Python 语言. 教育部早在两个月前(自2018年3月起)就以及公布:大学生全国计算机二级考试中必考Pyth ...

  2. Python_性能测试

    使用pip安装Python扩展库memory_profiler from memory_profiler import profile @profile #修饰器 def isPrime(n): if ...

  3. eclipse maven 构建简单springmvc项目

    环境:eclipse Version: Oxygen.3a Release (4.7.3a) 创建maven Project项目,目录结构 修改工程的相关编译属性 修改pop.xml,引入spring ...

  4. 【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置

    本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习 ...

  5. 【转】数据库事务ACID以及事务隔离

      本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...

  6. PAT1090:Highest Price in Supply Chain

    1090. Highest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...

  7. PAT1011:World Cup Betting

    1011. World Cup Betting (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Wit ...

  8. NRPE介绍

    一.简介 1.NRPE介绍 NRPE是Nagios的一个功能扩展,它可在远程Linux/Unix主机上执行插件程序.通过在远程服务器上安装NRPE插件及Nagios插件程序来向Nagios监控平台提供 ...

  9. org.springframework.web.servlet.PageNotFound

    2017-07-11 16:36:13.489 WARN [http-nio-8032-exec-16]org.springframework.web.servlet.PageNotFound -Re ...

  10. this.state.menuList.toArray()[0].get('id')

    用toArray()处理传过来的list用get(")获取里面的值 而我用的是attributes得方法