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
- while 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 launches
- CMD ["python", "app.py"]
注意, 由于我们使用到了比如 beautifulsoup 等第三方库, 因此我们需要安装相关模块. requirements.txt 内容如下所示 (注意换行):
- html5lib
- beautifulsoup4
- requests
运行并查看抓取结果
构建完成后, 我们运行起来结果如下所示:
来源: https://www.cnblogs.com/codelove/p/10715091.html