Python目前是流行度增加最快的主流編程語言,也是第二大最受開發者喜好的語言(參考Stack Overflow 2019開發者調查報告發布)。筆者建議.NET、Java開發人員能夠將Python發展爲第二語言,一方面Python在某些領域確實很是犀利(爬蟲、算法、人工智能等等),另外一方面,相信我,Python上手徹底沒有門檻,你甚至無需購買任何書籍!html
因爲近期在籌備4.21的長沙開發者大會,耽誤了很多時間。不過此次邀請到了騰訊資深技術專家、.NET中國社區領袖,微軟MVP張善友;52ABP開源框架的做者,微軟MVP梁桐銘;知名技術類做家汪鵬,騰訊高級工程師卓偉,騰訊雲高級產品經理胡李偉等等,有興趣參加的朋友能夠點擊公衆號菜單【聯繫咱們】==>【報名】進行報名,技術不分語言,亦沒有界限,期待和你分享、交流!html5
目錄
關於Pythonpython
官方鏡像算法
使用Python抓取博客列表docker
需求說明shell
瞭解Beautiful Soup編程
分析並獲取抓取規則後端
編寫代碼實現抓取邏輯瀏覽器
編寫Dockerfileapp
運行並查看抓取結果
關於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