文章目錄
- 前言
- 一、準備工作
- 1.1 環境配置
- 1.2 選擇目標網站
- 二、爬蟲實現步驟
- 2.1 獲取網頁內容
- 2.2 解析HTML
- 2.3 數據保存
- 三、完整代碼示例
- 四、優化與擴展
- 4.1 反爬應對策略
- 4.2 動態頁面處理
- 4.3 數據可視化擴展
- 五、注意事項
- 六、總結
- 互動環節
前言
在大數據時代,數據采集是開發者的必備技能之一,而Python憑借其簡潔的語法和豐富的庫(如requests
、BeautifulSoup
)成為爬蟲開發的首選語言。本文將從零開始,帶你一步步構建一個簡單的網頁數據采集系統,爬取目標網站的數據并保存為CSV文件。無論是新手還是有經驗的開發者,都能從中收獲實用技巧。歡迎在評論區分享你的爬蟲經驗!
一、準備工作
1.1 環境配置
確保已安裝Python 3.x,并準備以下庫:
pip install requests beautifulsoup4 pandas
1.2 選擇目標網站
本文以爬取「博客園」(https://www.cnblogs.com)熱門文章標題和鏈接為例。注意:爬蟲需遵守目標網站的robots.txt
協議,避免違反法律或道德規范。
二、爬蟲實現步驟
2.1 獲取網頁內容
使用requests
發送GET請求,獲取目標網頁的HTML源碼:
import requestsurl = "https://www.cnblogs.com"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}response = requests.get(url, headers=headers)
if response.status_code == 200:print("頁面獲取成功!")
else:print(f"請求失敗,狀態碼:{response.status_code}")
Tips:添加User-Agent
模擬瀏覽器請求,避免被網站屏蔽。
2.2 解析HTML
使用BeautifulSoup
提取熱門文章的標題和鏈接:
from bs4 import BeautifulSoupsoup = BeautifulSoup(response.text, "html.parser")
# 定位文章列表區域(根據博客園HTML結構)
articles = soup.select(".post-item .post-item-title a")data = []
for article in articles:title = article.text.strip()link = article["href"]data.append({"title": title, "link": link})
解析說明:
.post-item-title a
是博客園熱門文章的CSS選擇器,可通過瀏覽器開發者工具(F12)查看具體結構- 若目標網站結構不同,可調整選擇器
2.3 數據保存
將爬取結果保存為CSV文件:
import pandas as pddf = pd.DataFrame(data)
df.to_csv("cnblogs_hot_articles.csv", index=False, encoding="utf-8-sig")
print("數據已保存至cnblogs_hot_articles.csv")
三、完整代碼示例
import requests
from bs4 import BeautifulSoup
import pandas as pd# 發送請求
url = "https://www.cnblogs.com"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)if response.status_code == 200:# 解析HTMLsoup = BeautifulSoup(response.text, "html.parser")articles = soup.select(".post-item .post-item-title a")data = []for article in articles:title = article.text.strip()link = article["href"]data.append({"title": title, "link": link})# 保存數據df = pd.DataFrame(data)df.to_csv("cnblogs_hot_articles.csv", index=False, encoding="utf-8-sig")print("數據已保存至cnblogs_hot_articles.csv")
else:print(f"請求失敗,狀態碼:{response.status_code}")
四、優化與擴展
4.1 反爬應對策略
- 隨機延時:使用
time.sleep(random.uniform(1, 3))
避免頻繁請求 - 代理IP:引入代理池(如
requests
的proxies
參數)
4.2 動態頁面處理
對于JavaScript渲染的頁面,可使用:
selenium
模擬瀏覽器操作playwright
支持多瀏覽器自動測試
4.3 數據可視化擴展
from collections import Counter
import matplotlib.pyplot as pltwords = " ".join(df["title"]).split()
word_freq = Counter(words).most_common(10)
plt.bar([w[0] for w in word_freq], [w[1] for w in word_freq])
plt.show()
五、注意事項
- 法律合規:嚴格遵循
robots.txt
協議 - 性能優化:大規模爬取時建議使用多線程/異步庫(如
asyncio
) - 異常處理:添加完善的try-except機制
六、總結
通過本文實踐,我們掌握了從網頁請求到數據存儲的完整爬蟲開發流程。建議后續嘗試:
- 爬取電商商品數據(如京東/淘寶)
- 構建分布式爬蟲系統
- 結合機器學習進行數據分析
互動環節
- 你在項目中用過哪些Python爬蟲庫?有什么推薦?
- 遇到過最有趣的爬蟲挑戰是什么?
- 分享你的第一個爬蟲項目經歷!