Python 爬蟲初學者教程

?一、爬蟲基礎概念

?

什么是爬蟲?

爬蟲是模擬瀏覽器行為,自動獲取網頁數據的程序,常用于數據采集、信息監控等場景。

?

爬蟲的基本流程:

?

1.?發送請求獲取網頁內容

2.?解析內容提取數據

3.?存儲數據

?

二、環境準備

?

1.?安裝 Python:推薦 Python 3.8+,官網 下載后按提示安裝,記得勾選“Add to PATH”。

2.?安裝必要庫:

- ?requests?:發送 HTTP 請求(?pip install requests?)

- ?BeautifulSoup?:解析 HTML/XML 數據(?pip install beautifulsoup4?)

- ?lxml?:高效解析庫(?pip install lxml?,BeautifulSoup 可配合此庫使用)

?

三、第一個爬蟲:獲取網頁標題

?

以獲取豆瓣電影首頁標題為例,代碼如下:

?

import requests

from bs4 import BeautifulSoup

?

# 1. 發送請求

url = "https://movie.douban.com/"

response = requests.get(url)

?

# 2. 處理編碼(避免中文亂碼)

response.encoding = response.apparent_encoding

?

# 3. 解析網頁

soup = BeautifulSoup(response.text, 'lxml')

?

# 4. 提取數據:獲取所有電影標題

movie_titles = soup.find_all('span', class_='title')

?

# 5. 輸出結果

print("豆瓣電影首頁部分標題:")

for title in movie_titles:

? ? # 過濾非中文標題(避免廣告等干擾)

? ? if "·" not in title.text:

? ? ? ? print(title.text)

?

?

代碼解析:

?

- ?requests.get(url)? 發送 GET 請求獲取網頁內容

- ?BeautifulSoup? 用 lxml 解析器處理 HTML

- ?find_all('span', class_='title')? 根據標簽和類名提取元素

- 過濾邏輯避免輸出非電影標題(如廣告)

?

四、進階:處理動態網頁(以豆瓣短評為例)

?

動態網頁數據通常通過 API 接口返回,需分析網絡請求獲取真實數據地址:

?

import requests

import json

?

# 豆瓣電影《奧本海默》短評 API(需從瀏覽器開發者工具獲取)

api_url = "https://movie.douban.com/j/chart/top_list_comments"

params = {

? ? "movie_id": "35477223", # 電影ID

? ? "start": 0, # 起始評論數

? ? "limit": 20, # 每頁評論數

}

?

# 發送請求(帶參數)

response = requests.get(api_url, params=params)

comments_data = json.loads(response.text) # 解析JSON數據

?

# 提取并輸出評論

print("《奧本海默》短評:")

for comment in comments_data:

? ? print(f"用戶 {comment['author']}:{comment['content'][:50]}...")

?

?

五、爬蟲注意事項(避免被封IP)

?

1.?設置請求頭:模擬瀏覽器行為(添加 ?User-Agent? 等)

?

headers = {

? ? "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",

? ? "Accept": "text/html,application/xhtml+xml,application/xml"

}

response = requests.get(url, headers=headers)

?

?

2.?控制請求頻率:添加延時(避免頻繁請求)

?

import time

time.sleep(1) # 每次請求間隔1秒

?

?

3.?遵守網站規則:查看網站 ?robots.txt?(如豆瓣允許合理爬蟲,但禁止高頻請求)

?

六、實戰練習:爬取小說網站章節

?

以爬取某小說網站章節為例,完整代碼框架:

?

import requests

from bs4 import BeautifulSoup

import os

import time

?

# 小說主頁

novel_url = "https://example.com/novel"

?

# 1. 獲取章節列表

def get_chapter_list(url):

? ? response = requests.get(url)

? ? soup = BeautifulSoup(response.text, 'lxml')

? ? chapters = soup.find_all('a', class_='chapter-link')

? ? return [(chapter.text, chapter['href']) for chapter in chapters]

?

# 2. 獲取章節內容

def get_chapter_content(chapter_url):

? ? response = requests.get(chapter_url)

? ? soup = BeautifulSoup(response.text, 'lxml')

? ? content = soup.find('div', class_='content').text

? ? return content

?

# 3. 保存內容到文件

def save_to_file(chapter_name, content, novel_name):

? ? if not os.path.exists(novel_name):

? ? ? ? os.makedirs(novel_name)

? ? file_path = f"{novel_name}/{chapter_name}.txt"

? ? with open(file_path, 'w', encoding='utf-8') as f:

? ? ? ? f.write(content)

? ? print(f"已保存:{chapter_name}")

?

# 主流程

if __name__ == "__main__":

? ? novel_name = "小說名稱"

? ? chapters = get_chapter_list(novel_url)

? ? for i, (chapter_name, chapter_url) in enumerate(chapters):

? ? ? ? print(f"正在爬取第 {i+1}/{len(chapters)} 章:{chapter_name}")

? ? ? ? content = get_chapter_content(chapter_url)

? ? ? ? save_to_file(chapter_name, content, novel_name)

? ? ? ? time.sleep(2) # 間隔2秒,避免頻繁請求

?

?

七、進一步學習資源

?

- 書籍:《Python爬蟲開發與項目實戰》《精通Python網絡爬蟲》

- 在線課程:

- 廖雪峰 Python 教程

- 爬蟲實戰:B站視頻信息采集

- 工具推薦:

- 瀏覽器開發者工具(F12):分析網絡請求

- Postman:調試 API 請求

?

通過以上步驟,你可以完成基礎爬蟲的開發。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows下 tomcat的安裝部署

Tomcat是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。 本文將詳細介紹在Windows環境下搭建Tomcat服務器,來搭建小型應用。 要…

ASIO 避坑指南:高效、安全與穩健的異步網絡編程

ASIO 避坑指南:高效、安全與穩健的異步網絡編程 引言 ASIO是很強大的一個異步io庫,但服務器除了高效以外,穩定也是關鍵,這篇文章主要總結了ASIO使用遇到的典型問題和坑: 如何榨干io_context的性能,讓CPU…

鯨孿生中三維模型的常見問題~

鯨孿生是山海鯨中專門負責3D 場景搭建和渲染的組件,可以雙擊進入編輯,進入編輯之后組件欄也會跟著變化,可以插入更多的 3D 內部的組件。 搭建三維場景經常會使用到模型,包括人物模型、建筑物模型、汽車模型等,這些都可…

PyTorch中實現開立方

技術背景 在PyTorch中,沒有直接實現cbrt這一算子。這個算子是用于計算一個數的開立方,例如,最簡單的-8開立方就是-2。但這里有個問題是,在PyTorch中,因為沒有cbrt算子,如果直接用冪次計算去操作數字&#x…

關于如何在 Git 中切換到之前創建的分支的方法

文章目錄 關于如何在 Git 中切換到之前創建的分支的方法一、確保你在項目目錄中二、查看所有分支(可選)三、切換到目標分支四、如果分支僅在遠程存在五、驗證是否切換成功六、常見問題處理七、總結命令流程 PS:下次進入分支時,只需完成步驟1 …

基于深度學習的智能圖像語義分割系統:技術與實踐

前言 圖像語義分割是計算機視覺領域中的一個重要任務,其目標是將圖像中的每個像素分配到預定義的語義類別中。這一技術在自動駕駛、醫學影像分析、機器人視覺等多個領域有著廣泛的應用。近年來,深度學習技術,尤其是卷積神經網絡(C…

歷史軌跡組件性能優化方案

針對歷史軌跡組件的性能優化,可從數據處理、渲染策略、內存管理和交互優化四個方面入手。以下是具體的優化方向和實現方案: 一、數據處理優化 1. 軌跡數據抽稀算法 原理:在不影響軌跡整體形狀的前提下,減少軌跡點數量實現方案&…

【論文閱讀36】- Graph Attention Network(2025)

這篇論文主要介紹了一種基于改進型圖注意力網絡(Graph Attention Network, GAT)的滑坡變形異質性監測方法。該方法通過融合多尺度時間嵌入和自適應圖學習,能夠同時捕捉監測點之間復雜的時空依賴關系,有效反映滑坡的局部與整體變形…

CSS基礎3

動畫-animation 動畫-animation與 transition過渡動畫的區別 transition過渡動畫:實現兩個狀態間的變化過程動畫animation:實現多個狀態間的變化過程,動畫過程可控(重復播放、最終畫面、是否暫停) 走馬燈-使用transiti…

Java 程序設計試題?

?考試時間:120 分鐘? ?總分:100 分? 一、選擇題(每題 2 分,共 30 分) 1.以下哪個不是 Java 的關鍵字? A. final B. sizeof C. static D. void 2.以下代碼輸出結果是? System.out.printl…

Elasticsearch(ES)與 OpenSearch(OS)

Elasticsearch(ES)與 OpenSearch(OS)本質上是同源分叉、獨立演進的技術,兩者關系可概括為“起源相同、目標分化”。以下是關鍵要點解析: 🔍 一、核心關系:分叉與獨立演進 起源相同 O…

Python爬蟲實戰:研究Ghost.py相關技術

1 引言 1.1 研究背景與意義 隨著互聯網技術的不斷發展,現代網頁越來越多地采用 JavaScript 動態生成內容,傳統的靜態爬蟲技術已難以滿足需求。例如,許多新聞網站的評論區、電商平臺的商品列表以及社交網站的動態內容均通過 AJAX 異步加載,普通爬蟲無法獲取這些內容。Ghos…

PostgreSQL(知識片):查詢/計算Selectivity(可選性)

一、視圖pg_ststs查詢可選性 1、當可選性較小時,可以用視圖pg_ststs來查詢 表的每一列的MVC(most Common Value)作為一對most_common_vals和most_common_freqs的列存儲在pg_ststs視圖中。 (1)most_common_vals&#x…

Android Studio 打 APK 包報錯 Invalid keystore format 的解決方法

提示:“奔跑吧鄧鄧子” 的必備核心技能專欄聚焦計算機技術與職場場景,拆解程序員、產品經理等技術從業者的核心能力圖譜。內容涵蓋編程思維、算法實戰、項目管理、技術架構等硬核技能,結合案例解析代碼優化、跨團隊協作等落地方法論。定期更新…

通義靈碼2.5智能體模式實戰———集成高德MCP 10分鐘生成周邊服務地圖應用

1 引言 在當今快節奏的開發環境中,智能編程助手正成為開發者生產力的倍增器。通義靈碼2.5的智能體模式通過任務分解、多輪對話和上下文感知,將傳統代碼補全提升為完整的解決方案生成能力。本文將以實戰案例展示如何利用通義靈碼2.5集成高德地圖MCP服務&…

【Linux】使用ip link命令設置bond

目錄 1、介紹2、設置步驟【1】創建bonding接口【2】設置bonding模式【3】添加物理網口到bonding接口【4】激活bonding接口 3、解除步驟【1】關閉bond接口【2】接觸從屬接口【3】刪除bond接口 1、介紹 設置bond的方法有很多種,其中通過命令行ip link設置就是其中一種…

Camunda相關表結構和字段備注SQL腳本

Camunda相關表結構和字段備注SQL腳本 引camunda engine表和字段備注 引 Camunda engine服務啟動時會自動創建相關的表,沿用了activity的設計,我這里使用的是7.17.0版,自動生成了49張表,但所有的表和字段都沒有備注信息&#xff0c…

Qt、C++自定義按鈕、組件、事件編程開發練習,萬字實戰解析!!

x項目地址:https://gitee.com/fan-wenshan/qt_learn_button-andevent_zhengzhuo 項目界面截圖: ### 項目介紹:comstomSingal (Qt應用程序) 項目基本信息 - 項目類型 :Qt Widgets應用程序 - 開發環境 :Qt 5.12.12 Min…

商務年度總結匯報PPT模版分享

商務匯報,工作總結,畢業答辯,簡歷競聘PPT模版,創意年終匯報PPT模版,IDEAS商務匯報PPT模版,年度總結PPT模版,創意低多邊形PPT模版,商務型PPT模版,小清新創意花朵PPT模版&a…

電機設計仿真軟件學習DAY3——Maxwell界面功能+3D幾何模型繪制

"手把手教你玩轉電機!每日更新教程,評論區答疑解惑,小白也能變大神!" 目錄 maxwell基礎操作 一.Maxwell基礎操作:新建項目 二.maxwell3D界面 三.maxwell3D繪圖 3.1繪制圓柱體的方法 3.2繪制正方體的方法…