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
執行並檢視抓取結果
構建完成後,我們執行起來結果如下所示:
朋友會在“發現-看一看”看到你“在看”的內容