以下是一個Python網路爬蟲的實踐案例,該案例將演示如何使用Python爬取貓眼電影Top100的電影名稱、主演和上映時間等資訊,並將這些資訊儲存到TXT檔案中。此案例使用了requests
庫來傳送HTTP請求,使用re
庫進行正規表示式匹配,幷包含詳細的程式碼解釋,以確保程式碼可以直接執行。
1. 準備工作
在開始之前,我們需要確保已經安裝了requests
庫。我們可以使用以下命令進行安裝:
bash複製程式碼
pip install requests
2.貓眼電影Top100的資訊是從哪些頁面爬取的呢
貓眼電影Top100的資訊是從貓眼電影的官方網站(如 https://maoyan.com/board/4 )爬取的。具體來說,這個頁面展示了貓眼電影Top100的榜單,包含了電影的排名、名稱、主演、上映時間、評分等詳細資訊。
在爬取過程中,爬蟲程式會模擬瀏覽器行為傳送HTTP請求到該頁面的URL,並接收伺服器返回的HTML內容。然後,程式會使用正規表示式或解析庫(如BeautifulSoup、lxml等)來解析HTML內容,提取出所需的資訊(如電影名稱、主演、上映時間等)。
由於貓眼電影的頁面結構和反爬蟲機制可能會發生變化,因此在實際應用中,爬蟲程式可能需要根據實際情況進行調整和最佳化。此外,爬取網站資料時應遵守相關法律法規和網站的使用協議,不得用於非法用途。
需要注意的是,由於貓眼電影Top100的榜單是動態變化的,因此爬取到的資訊可能只是某一時刻的快照。如果需要獲取最新或實時的榜單資訊,爬蟲程式需要定期執行並更新資料。
3. 程式碼實現
以下是完整的程式碼示例:
import requests
import re
# 請求URL
url = 'https://maoyan.com/board/4'
# 請求頭部,模擬瀏覽器請求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
# 解析頁面函式
def parse_html(html):
# 使用正規表示式匹配電影資訊
pattern = re.compile(r'<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)
items = re.findall(pattern, html)
# 將匹配到的資訊轉換為字典格式
for item in items:
yield {
'電影名稱': item[1],
'主演': item[2].strip(),
'上映時間': item[3]
}
# 儲存資料函式
def save_data():
# 開啟檔案準備寫入
f = open('maoyan_top100.txt', 'w', encoding='utf-8')
# 分頁爬取資料,每頁10條
for i in range(10):
# 構建分頁URL
page_url = f'https://maoyan.com/board/4?offset={i*10}'
# 傳送HTTP請求獲取頁面內容
response = requests.get(page_url, headers=headers)
# 解析頁面內容
for item in parse_html(response.text):
# 將資訊寫入檔案
f.write(str(item) + '\n')
# 關閉檔案
f.close()
# 主函式
if __name__ == '__main__':
save_data()
4. 程式碼解釋
- 請求URL和頭部:定義了要爬取的貓眼電影Top100的URL和請求頭部,模擬瀏覽器請求以避免被反爬蟲機制攔截。
- 解析頁面函式:
parse_html
函式使用正規表示式匹配頁面中的電影資訊,包括電影名稱、主演和上映時間。正規表示式中的re.S
標誌表示讓.
匹配包括換行符在內的所有字元。 - 儲存資料函式:
save_data
函式負責分頁爬取資料,並將解析到的資訊寫入TXT檔案中。透過迴圈10次,每次構建分頁URL併傳送請求,然後解析頁面內容並寫入檔案。 - 主函式:在
__main__
塊中呼叫save_data
函式開始爬取資料。
5.程式碼中包含了其他的功能模組
在提供的程式碼中,雖然主要功能是爬取貓眼電影Top100的資訊,但程式碼結構本身也體現了幾個關鍵的功能模組。這些模組使得程式碼更加清晰、易於維護和擴充套件。以下是程式碼中包含的其他功能模組:
(1)請求傳送模組:
- 使用
requests.get
函式傳送HTTP GET請求到指定的URL。 - 透過
headers
引數設定請求頭部,以模擬瀏覽器行為。
(2)頁面解析模組(parse_html函式):
- 使用正規表示式(
re.compile
和re.findall
)解析HTML內容,提取所需資訊。 - 正規表示式定義了要匹配的內容結構,包括電影名稱、主演和上映時間等。
- 將匹配到的資訊以字典形式返回(透過生成器
yield
逐個返回,節省記憶體)。
(3)資料儲存模組(save_data函式):
- 負責將解析到的資料儲存到檔案中。
- 實現了分頁爬取,透過迴圈構建不同頁面的URL併傳送請求。
- 將每條電影資訊轉換為字串並寫入檔案,每條資訊佔一行。
(4)主程式模組(if name== main:部分):
- 作為程式的入口點,呼叫
save_data
函式開始執行爬取任務。 - 確保當該指令碼作為主程式執行時才執行爬取操作,而當它被其他指令碼匯入時不會執行。
(5)錯誤處理模組(隱含):
- 雖然程式碼中沒有顯式的
try-except
塊來處理可能出現的異常(如網路請求失敗、解析錯誤等),但在實際應用中,新增錯誤處理是非常重要的。 - 可以透過新增異常處理來增強程式碼的健壯性和使用者友好性。
(6)可擴充套件性模組(隱含):
- 程式碼結構清晰,使得新增新功能(如爬取更多資訊、支援其他網站等)變得相對容易。
- 可以透過修改正規表示式、新增新的解析函式或資料儲存邏輯來擴充套件程式碼的功能。
需要注意的是,雖然程式碼在結構上包含了這些模組,但在實際應用中可能還需要進一步完善,比如新增日誌記錄、最佳化正規表示式以提高解析效率、處理動態載入的內容(可能需要使用Selenium等工具)等。此外,由於網站結構和反爬蟲機制的變化,程式碼可能需要根據實際情況進行調整。
6. 執行程式碼
將上述程式碼儲存為一個Python檔案(例如maoyan_spider.py
),然後在命令列中執行該檔案:
bash複製程式碼
python maoyan_spider.py
執行完成後,我們會在當前目錄下找到一個名為maoyan_top100.txt
的檔案,裡面包含了貓眼電影Top100的電影名稱、主演和上映時間等資訊。
7.注意事項
- 由於網站結構和反爬蟲機制可能會發生變化,因此在實際應用中可能需要對程式碼進行相應的調整。
- 爬取網站資料時應遵守相關法律法規和網站的使用協議,不得用於非法用途。
透過此案例,我們可以學習到如何使用Python進行網路爬蟲的基本步驟和方法,包括髮送HTTP請求、解析頁面內容和儲存資料等。希望這個案例對你有所幫助!