簡單 Python 爬蟲程序設計

爬蟲是獲取網頁數據的常用工具,我們一起來設計一個基于 ?requests? 和 ?BeautifulSoup? 的簡單爬蟲,它可以獲取網頁內容并提取文本信息。

?

?

所需庫安裝

?

首先需要安裝兩個必要的庫:

?

pip install requests beautifulsoup4

?

?

完整代碼

?

import requests

from bs4 import BeautifulSoup

import time

import random

import os

?

def simple_crawler(url, save_dir="crawled_data"):

? ? """

? ? 簡單網頁爬蟲程序

? ? :param url: 要爬取的網頁URL

? ? :param save_dir: 保存數據的目錄

? ? :return: 爬取的文本內容

? ? """

? ? try:

? ? ? ? # 模擬瀏覽器請求頭,避免被識別為爬蟲

? ? ? ? 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"

? ? ? ? }

? ? ? ??

? ? ? ? # 發送GET請求

? ? ? ? response = requests.get(url, headers=headers, timeout=10)

? ? ? ??

? ? ? ? # 檢查請求是否成功

? ? ? ? if response.status_code == 200:

? ? ? ? ? ? # 設置正確的編碼(處理中文亂碼)

? ? ? ? ? ? response.encoding = response.apparent_encoding

? ? ? ? ? ??

? ? ? ? ? ? # 使用BeautifulSoup解析HTML

? ? ? ? ? ? soup = BeautifulSoup(response.text, 'html.parser')

? ? ? ? ? ??

? ? ? ? ? ? # 提取所有文本內容

? ? ? ? ? ? all_text = soup.get_text()

? ? ? ? ? ??

? ? ? ? ? ? # 創建保存目錄(如果不存在)

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

? ? ? ? ? ? ? ? os.makedirs(save_dir)

? ? ? ? ? ??

? ? ? ? ? ? # 保存內容到文件

? ? ? ? ? ? filename = f"{save_dir}/{url.split('//')[-1].split('/')[0].replace('.', '_')}_{int(time.time())}.txt"

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

? ? ? ? ? ? ? ? f.write(all_text)

? ? ? ? ? ??

? ? ? ? ? ? print(f"成功爬取并保存內容到 {filename}")

? ? ? ? ? ? return all_text

? ? ? ? else:

? ? ? ? ? ? print(f"請求失敗,狀態碼: {response.status_code}")

? ? ? ? ? ? return None

? ??

? ? except requests.exceptions.RequestException as e:

? ? ? ? print(f"請求異常: {e}")

? ? ? ? return None

? ? except Exception as e:

? ? ? ? print(f"發生錯誤: {e}")

? ? ? ? return None

?

if __name__ == "__main__":

? ? # 要爬取的網址(請替換為你想爬取的合法網址)

? ? target_url = "https://example.com"

? ??

? ? # 執行爬取

? ? content = simple_crawler(target_url)

? ??

? ? if content:

? ? ? ? # 打印前500個字符(可選)

? ? ? ? print(f"\n爬取內容預覽:\n{content[:500]}...")

?

?

代碼功能解析

?

這個爬蟲程序主要包含以下幾個部分:

?

- 請求頭設置:模擬瀏覽器請求頭,降低被網站反爬機制識別的概率

- 請求發送:使用?requests?庫發送HTTP GET請求獲取網頁內容

- 內容解析:通過?BeautifulSoup?解析HTML,提取純文本內容

- 數據保存:將爬取的內容保存到本地文本文件中

- 異常處理:包含請求異常和通用異常處理,增強程序穩定性

?

使用注意事項

?

1.?替換URL:將代碼中的?https://example.com?替換為你想爬取的合法網址

2.?遵守規則:爬取前請閱讀網站的?robots.txt?,遵守網站爬取規則

3.?控制頻率:代碼中可添加?time.sleep(random.uniform(1, 3))?來控制爬取間隔,避免對服務器造成壓力

4.?合法用途:請確保爬取行為用于學習、研究等合法用途,避免侵犯他人權益。

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

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

相關文章

AUTOSAR圖解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API詳解 自適應平臺通信API技術詳解 目錄 1. 概述2. ara::com API架構 2.1 Proxy/Skeleton架構2.2 通信方式2.3 服務連接方式 3. 詳細API說明 3.1 Proxy類3.2 Skeleton類3.3 實例標識符3.4 通信組 4. ara::com API狀態管理 4.1 服務生命周期4.2 事件與方法狀…

Spring Boot + 本地部署大模型實現:優化與性能提升

在將大語言模型集成到 Spring Boot 應用中時,性能優化是一個關鍵環節。本地部署的大模型雖然提供了強大的功能,但也可能帶來一些性能挑戰,如響應時間較長、資源占用較高等問題。本文將介紹如何在 Spring Boot 應用中優化本地部署大模型的性能…

QML 鼠標只響應左鍵處理方法

【1】問題描述 默認情況下qml支持左鍵,如果需要支持右鍵,甚至是中鍵那需要設置 【2】設置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算網亮相2025全球數字經濟大會|共繪數字友好城市建設

7月2日,以“建設數字友好城市”為主題的2025全球數字經濟大會隆重開幕,為構建技術與人、城市與生態和諧共進的全球數字經濟新生態提供交流合作平臺。自7月3日開始,北方算網將在大會集中亮相,先后在多個論壇中發表主題演講&#xf…

Android PNG/JPG圖ARGB_8888/RGB_565?解碼形成Bitmap在物理內存占用大小的簡單計算

Android PNG/JPG圖ARGB_8888/RGB_565?解碼形成Bitmap在物理內存占用大小的簡單計算 Android的Bitmap 是一個用于表示圖像數據的核心類,代表一張圖片在內存中的存儲,Bitmap存儲了圖像的像素信息數據。 Bitmap把圖像理解為像素點組成的二維矩陣&#xff…

力扣網編程55題:跳躍游戲之逆向思維

一. 簡介 前面一篇文章使用貪心算法解決 力扣網55題:跳躍游戲,文章如下: 力扣網編程55題:跳躍游戲之貪心算法-CSDN博客 二. 力扣網編程55題:跳躍游戲之逆向思維 給你一個非負整數數組 nums ,你最初位于數…

蒼穹外賣--day12數據統計-Excel報表

1.工作臺1.1實現思路工作臺是系統運營的數據看板,并提供快捷操作入口,可以有效提高商家的工作效率。工作臺展示的數據:①今日數據②訂單管理③菜品總覽④套餐總覽⑤訂單信息名詞解釋:①營業額:已經完成訂單的總金額②有…

鴻蒙應用開發:從網絡獲取數據

一、網絡狀態概述上述任一指標的變化均可視為網絡狀態的改變 二、獲取網絡信息 創建網絡對象 //創建網絡對象 //?表示可傳可不傳 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;獲取默認激活網絡及其能力 //獲取默認激活網絡 …

探索開源虛擬 Excel 函數模塊:Python 中的 Excel 功能利器

在數據處理和分析的領域中,Excel 一直是一款備受青睞的工具,它提供了豐富多樣的函數,幫助用戶高效地完成各種數據操作。而現在,我(董翔)開發一個基于 Python 的虛擬 Excel 函數模塊,它將 Excel …

開源 vGPU 方案 HAMi: corememory 隔離測試

本文主要對開源的 vGPU 方案 HAMi 的 GPU Core&Memory 隔離功能進行測試。 省流: HAMi vGPU 方案提供的 Core&Memory 隔離基本符合預期: Core 隔離:Pod 能使用的算力會圍繞設定值波動,但是一段時間內平均下來和申請的 g…

openstack安裝并初始化

openstack安裝并初始化openStack 概述OpenStack 起源什么是Openstackopenstack優勢使用本地倉庫離線安裝系統基本環境設置為系統設置本地倉庫創建openstack-train的倉庫更新系統安裝部署工具一鍵安裝設置橋接網絡通過 Dashboard 體驗 OpenStack 功能創建云主機創建網絡(1)用adm…

解決 Cannot create Swift scratch context

場景復現 Xcode 控制臺輸出: Cannot create Swift scratch context (couldnt create a Clang Importer)Analysis 分析 發生了什么? 在調試 Swift 代碼或在 LLDB 里執行 po/expr 命令時,LLDB 需要為表達式臨時創建一份 “Swift scratch co…

機械時代的計算

1、機械計算起源 最近在想平衡三進制的除法,想看看那么大牛是怎么做的,資料很少,但還是有的,有但是看不懂,也不知靠不靠譜,后面跟著實踐了能行,下面就看看Balanced Ternary Arithmetic&#xff…

相機光學(四十八)——漸暈

1.什么是漸暈 漸暈,又稱“光衰減”,在光學和攝影中很常見,簡單來說就是與中心相比,圖像角落變暗。漸暈要么是由光學引起的,要么是在后期處理中故意添加的,目的是將觀看者的視線從角落的干擾物吸引到圖像的中…

LabVIEW多通道阻抗測試儀

LabVIEW集成 Keysight 數字萬用表與 NI 矩陣開關卡,構建多通道阻抗測試系統,實現設備連接電纜的多芯阻抗自動化測試,涵蓋數據采集、分析、記錄與顯示功能,適用于高精度阻抗檢測場景,展現LabVIEW在儀器控制與自動化測試…

MySQL的5.0和8.0版本區別

目錄 1、MySQL版本-- 》5版本 1.1、InnoDB存儲引擎 1.2、存儲過程和觸發器 1.3、視圖 1.4、增強的查詢優化器 1.5、增強的索引支持 1.6、外鍵支持 1.7、分區表和分布式查詢 2、MySQL版本-- 》8版本 2.1、性能 2.2、字符編碼改變 2.3、持久化保存 2.4、隱藏索引和降…

python實現簡單的地圖繪制與標記20250705

用python語言繪制顯示范圍不大于上海地區的地圖 您的代碼實現了一個 上海武館地理信息系統,主要功能是通過可視化地圖展示上海各區的傳統武術館信息。 通過和deeps對話一晚上實現的,我就是描述修改 高德的api key我搞了一會,平時很少接觸密…

Qt開發:QListWidget的介紹和使用

文章目錄 一、QListWidget的簡介二、QListWidget的基本用法三、QListWidget的數據操作2.1 插入數據2.2 查找數據2.3 選項設置 四、QListWidget的信號與槽 一、QListWidget的簡介 QListWidget 是 Qt 框架中用于顯示和操作條目列表的控件,它是 QListView 的一個子類&a…

React Native 親切的組件們(函數式組件/class組件)和陌生的樣式

寫多了taro, 看見react native中的組件好親切啊,幾乎一模一樣。 一、函數式組件 — 常用 1)無狀態,每次刷新都是生成一個新的狀態 2)基于狀態變化的管理 3)簡潔,代碼少,易于服用 import Reac…

Spring boot之身份驗證和訪問控制

本文筆記跟隨于遇見狂神說老師的視頻 一.SpringSecurity(安全) 1.相關概念 在web開發中,安全第一位,有簡單的方法,比如:攔截器,過濾器 也有安全框架,比如:SpringSecu…