Docker最全教程之Python爬网实战(二十二)

640?wx_fmt=gif


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

注意,请认准官方镜像:

640?wx_fmt=png


使用Python抓取博客列表



需求说明


本篇使用Python来抓取我的博客园的博客列表,打印出标题、链接、日期和摘要。

博客地址:http://www.cnblogs.com/codelove/

内容如下所示:

640?wx_fmt=png


了解Beautiful Soup


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

Beautiful Soup官方网站:https://beautifulsoup.readthedocs.io

主要解析器说明:

640?wx_fmt=png

 


分析并获取抓取规则


首先我们使用Chrome浏览器打开以下地址:http://www.cnblogs.com/codelove/

然后按下F12打开开发人员工具,通过工具我们梳理了以下规则:

  1. 博客块(div.day)


    640?wx_fmt=png

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


    640?wx_fmt=png

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

    640?wx_fmt=png

然后我们通过观察博客路径,获取到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)

    #使用BeautifulSouphtml5lib解析器解析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


运行并查看抓取结果


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

640?wx_fmt=png

 


| 往期内容 |


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(二十一)




640?wx_fmt=png转载是一种动力 分享是一种美德640?wx_fmt=gif

如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


QQ群:

编程交流群<85318032> 

产品交流群<897857351>


640?wx_fmt=png640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2870 [USACO07DEC]Best Cow Line G

P2870 [USACO07DEC]Best Cow Line G 题意&#xff1a; 给你一个字符串&#xff0c;每次从首或尾取一个字符组成字符串&#xff0c;问所有能够组成的字符串中字典序最小的一个。 题解&#xff1a; 现在要组成字典序最小的&#xff0c;那我们每次就尽可能取小的 我们从两端开…

中间件是什么?在.NET Core中的工作原理又是怎样的呢?

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core appsettings.json文件ASP.NET Core 中的中间件(Middleware)在这个视频中&#xff0c;我们将了解&#xff0c;ASP.NET Core 中的中间件是 什么&#xff1f;中间件很重要&#xff0c;尤其是在你想当架构…

从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行

本文描述的是对国家统计局于2019-01-31发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。本文更新&#xff08;移步查阅&#xff09;&#xff1a;19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式…

Display Substring

Display Substring 题意&#xff1a; 一个长度为n的字符串&#xff0c;每个字符有自己的价值&#xff0c;求第k小价值的不重复子串价值 题解&#xff1a; 首先众所周知&#xff0c;所有子串都可以用后缀的前缀来表示&#xff0c;这就和后缀数组扯上关系了 我们可以直接二分…

使用 DotNet CLI 创建自定义的 WPF 项目模板

描述当我们安装完 DotNetCore 3.0 版本的 SDK 后&#xff0c;我们就可以创建基于 DotNetCore 的 WPF 项目模板&#xff0c;通过如下 CLI 可以方便快捷的创建并运行我们的项目&#xff1a;Copydotnet new wpf -n WpfAppcd WpfAppdotnet restoredotnet run做过 WPF 开发的朋友都知…

[翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

一步一步指导您使用 ElasticSearch, Kibana, ASP.NET Core 2.1 和 Docker 来记录日志在本教程中&#xff0c;我将向您展示如何启动和运行 ElasticSearch&#xff0c;Kibana 和 ASP.NET Core 2.1在开始之前&#xff0c;让我们来看看 ElasticSearch&#xff0c;Kibana 和 Serilog…

【学习笔记】WQS二分详解及常见理解误区解释

文章目录应用分析算法分析WQS二分精髓的两点细节&#xff08;博客重点&#xff01;&#xff09;真题分析[国家集训队]Tree Ⅰ忘情星际广播网上很多博客写得模模糊糊的&#xff0c;对我这个新手可是一点都不友好。 昨天一天都在研究这个东西&#xff0c;分享一下自己的拙见。 百…

ASP.NET Core中HTTP管道和中间件的二三事

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;中间件是什么&#xff1f;在.NET Core中的工作原理又是怎样的呢&#xff1f;配置ASP.NET Core请求(Request)处理管道在本视频中&#xff0c;我们将讨论使用中间件组件为asp.net core 应用程序配置请求处理管道。作为…

.Net Core Razor 预编译,动态编译,混合编译

预编译预编译是ASP .Net Core的默认方式。在发布时&#xff0c;默认会将系统中的所有Razor视图进行预编译。编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xxx.Views.dll动态编译将项目整个配置成动态编译很简单&#xff0c;添加一个配置项目MvcRazorCompileOnPubl…

一张图来看看.NETCore和前后端技术的演进之路

一张图2019年3月10日&#xff0c;在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上&#xff0c;我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散&#xff0c;由于各种原因未能成功&#xff0c;…

【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法

以下均假设最优解是在最低点。 爬山法 爬山算法是一种局部择优的方法&#xff0c;采用启发式方法&#xff0c;是对深度优先搜索的一种改进&#xff0c;它利用反馈信息帮助生成解的决策。 直白地讲&#xff0c;就是当目前无法直接到达最优解&#xff0c;但是可以判断两个解哪…

Strange Memory Gym - 102832F

Strange Memory Gym - 102832F 题意&#xff1a; 有一颗n个节点的树&#xff0c;求下面公式的值&#xff1a; 题解&#xff1a; a ⊕ b c 可以推出a ⊕ c b 那么ai⊕ajalca(i,j)a_{lca(i,j)}alca(i,j)​,可以得到&#xff1a;ai⊕alca(i,j)a_{lca(i,j)}alca(i,j)​aj,ai就…

.net core 使用RSA获取私钥证书并签名

以前我们使用RSA加密主要是使用RSACryptoServiceProvider这个类&#xff0c;在.NET Core中也有这个类&#xff0c;但是这个类并不支持跨平台&#xff0c;所以如果你是用这个类来进行加/解密在windows上运行是完全没有错误的&#xff0c;但是只要你一放到Linux下就会出现异常。查…

CDN流量调度问题(2021CCPC华为云挑战赛)

CDN流量调度问题 题意&#xff1a; 有n个线路&#xff0c;每个线路的任务量为a[i],初始状态下&#xff0c;每个线路起初只有一个节点&#xff0c;每个线路完成任务所需时间为 现在你要给每个线路增加节点&#xff0c;所有增加的节点总数不超过m&#xff0c;第i个线路增加节点…

.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

.NET Core 3.0 Preview 3已经推出&#xff0c;它包含了一系列关于ASP.NET Core的新的更新。下面是该预览版的更新列表&#xff1a;Razor组件改进:单项目模板 新的Razer扩展Endpoint路由集成预呈现Razor类库中的Razor组件改进事件处理 Forms & validation运行时编译Worker服…

世界五星级大厨经典菜品集

本blog只是记录C学习以来掉过的一些坑&#xff0c;写下来防止自己下一次再犯&#xff0c;顺便分享 持续更新&#xff0c;到死为止菜品特套1&#xff1a;vector.size() ~ 的使用菜品特套2&#xff1a;if-else的缩进菜品特套3&#xff1a;int范围边界的1ll使用菜品特套4&#xff…

ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

关心最多的问题&#xff0c;不FQ能不能用&#xff0c;答案是能。Google官方提供额外的域名来提供服务&#xff0c;国内可以正常使用。一. 前言验证码在我们实际的生活场景中非常常见&#xff0c;可以防止恶意破解密码、刷票、论坛灌水、刷注册等等。现在的网站基本都有使用验证…

P4173 残缺的字符串

P4173 残缺的字符串 题意&#xff1a; 有A&#xff0c;B两个串&#xff0c;每个串都有通配符&#xff0c;问A为模板串&#xff0c;对于 B 的每一个位置 i&#xff0c;从这个位置开始连续 m 个字符形成的子串是否可能与 A 串完全匹配&#xff1f; 题解&#xff1a; 我们定义…

FFT/NTT卷积神级副本

干货满满的良心博客传送至只有小怪的村庄——请开始你的逆天之路A&#xff1a;P1919B&#xff1a;P4157刷怪升级——转战玄灵大陆C&#xff1a;P6300D&#xff1a;P3763E&#xff1a;P3321F&#xff1a;P5641G&#xff1a;P4986H&#xff1a;P4721——获得知识药剂一瓶——分治…

程会玩 | 在.NET Core里操作Git

点击上方蓝字关注“汪宇杰博客”Git是很多程序员的首选源代码版本控制工具&#xff0c;我最近也从TFVC切换到了Git&#xff0c;受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。为啥要这么做首先&#xff0c;这件事情的意义&#xff0c;并不是闲的蛋疼。我们确实有很…