1. 加載和解析HTML文件
功能性簡介
函式庫requests
就是我們的“使者”,
它負責出門抓取網頁的HTML代碼。它會發送HTTP請求並傳回頁面,像外送披薩一樣,只是沒有“瑪格麗特”和外送盒。
BeautifulSoup
則是我們的“廚師”,
它可以輕鬆地將獲取到的HTML分解成小單位(標籤、屬性和文字),讓我們進一步使用。它會幫助我們找到需要的元素並保存重要資訊。
使用requests函式庫
現在我們準備好進行我們的第一個HTTP請求並獲取頁面的HTML代碼。讓我們來練習加載
example.com
這個頁面。這個網站是網路時代的老兵,非常適合入門。
import requests
url = 'http://example.com'
response = requests.get(url)
# 檢查一切是否正常
if response.status_code == 200:
print("頁面加載成功!")
else:
print("出現問題。錯誤代碼:", response.status_code)
這個程式會向URL發送請求,並根據回傳的響應顯示成功或失敗。如果一切正常,我們手中將擁有頁面的HTML代碼作為文字。
分析錯誤代碼
若你要自動化解析,你常會遇到頁面應該能加載卻無法加載的情況。所以分析錯誤代碼是一個解析多於幾頁面的項目不可缺少的部分。
因為某些網站的擁有者不太喜歡別人解析他們的數據。首先,這可能會增加網站負載(當一次解析數千頁面時)。其次,這些數據是他們賺錢的資產。有很多方法可以對抗解析:CAPCHA、CloudFlare等。
對於商業來說理想的情況是,你可以解析所有競爭對手的數據,但沒人可以解析你的。這種情況像是一場冷戰。
用BeautifulSoup解析HTML
獲取HTML代碼後,我們可以開始用BeautifulSoup
來研究它。就像打開一本書來讀它的內容:
from bs4 import BeautifulSoup
# 將HTML代碼內容傳給BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# 查看內部內容
print(soup.prettify())
方法prettify()
會對HTML代碼進行美化格式化,讓你能夠更方便地研究它。在接下來的課程中,我們會開始挖掘這些HTML,就像小孩在沙坑裡玩耍一樣。回家時,疲憊但滿足地收穫滿滿 :)
3. 實踐:加載和分析HTML
為了鞏固理解,讓我們來進行實際操作。我們將嘗試從example.com
抓取標題和描述。為此,我們會使用HTML知識和新學會的BeautifulSoup技能。
數據提取
# 抓取頁面標題
title = soup.title.string
print("頁面標題:", title)
# 抓取主標題 (h1)
main_heading = soup.h1.string
print("主標題:", main_heading)
# 抓取段落的文字內容
paragraph = soup.find('p').text
print("第一段落:", paragraph)
在這個範例中,我們使用title
、h1
屬性和方法find()
,來從頁面中提取所需的資訊。我們成為了網路偵探,調查犯罪現場的線索!
4. 常見錯誤
很可能,在處理網頁爬取時,你會遇到一些常見的錯誤,包括HTTP請求處理錯誤、信息提取不正確或HTML解析錯誤。開發穩定可靠的腳本需要耐心和練習。例如,始終檢查狀態碼
(response.status_code
)以確保請求成功執行。不正確使用方法find()
和find_all()
可能導致錯誤,特別是當你忽略了HTML結構時。在開始解析之前一定要分析HTML結構。
網頁爬取有很多實際應用:從數據收集分析到自動化監控商品價格。這些知識也可能在面試中對你有所幫助,例如展示一些專案代碼的範例。在實際操作中,像市場行銷人員常會使用爬取技術來監控競爭對手的價格,而開發者則用來與外部網站集成。
當處理新聞聚合器和分析系統的信息時,網頁爬取知識也會派上用場。你可以通過創建腳本自動化完成繁瑣的任務,從不同來源收集數據。讓我們繼續開發我們的虛擬應用程序,感受成為真正的網絡大師的樂趣吧!
GO TO FULL VERSION