爬蟲 crawler 入門爬取不設防網頁 并實現無限增生

基礎版本

爬取網頁后直接將前端html代碼不加處理的輸出

# pip3 install requests
import requests# request the target URL
def crawler():response = requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)# execute the crawler
crawler()

無限增生的爬蟲

從第一個鏈接開始,記錄已經遍歷過的鏈接;
并且從這個鏈接爬取的html代碼中記錄 a[href] 的鏈接,存儲到將要遍歷的列表;
對于已經爬取的鏈接,直接continue處理

# pip3 install requests
import requestsdef crawler():while urls_to_visit:# get the page to visit from the listcurrent_url = urls_to_visit.pop(0)print(current_url)if current_url in visited_urls:continue# 記錄訪問過的url到列表中visited_urls.add(current_url)try:response = requests.get(current_url, timeout=5)  # 設置超時時間,避免死循環response.raise_for_status()  # 檢查請求是否成功except requests.RequestException as e:print(f"請求失敗: {current_url}, 錯誤: {e}")continue# parse the HTMLsoup = BeautifulSoup(response.text, "html.parser")# collect all the linkslink_elements = soup.select("a[href]")for link_element in link_elements:url = link_element["href"]if url.startswith("#"):continue  # ignore internal links# convert links to absolute URLsif not url.startswith("http"):absolute_url = requests.compat.urljoin(target_url, url)else:absolute_url = url# ensure the crawled link belongs to the target domain and hasn't been visitedif (absolute_url.startswith(target_url)and absolute_url not in urls_to_visit):urls_to_visit.append(url)# pip3 install requests beautifulsoup4from bs4 import BeautifulSouptarget_url = "https://www.scrapingcourse.com/ecommerce/"
# initialize the list of discovered URLs
urls_to_visit = [target_url]
visited_urls = set()  # 記錄已訪問的 URL,防止重復爬取
# execute the crawler
crawler()

無限增生的效果

在這里插入圖片描述
部分鏈接爬取失敗后會返回錯誤信息

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

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

相關文章

C++高頻(四)之c++11新特性

C++面試高頻(四)之c++11新特性 1.簡述C++11有什么新特性?? 自動類型推導(Type Inference):引入了 auto 關鍵字,允許編譯器根據初始化表達式的類型自動推導變量的類型。統一的初始化語法(Uniform Initialization Syntax):引入了用花括號 {} 進行初始化的統一語法,可…

HarmonyOs- UIAbility應用上下文

上下文為何物 上下文在計算機科學領域是一個廣泛存在的概念。是現代操作系統核心抽象概念之一。其本質是環境信息的結構化封裝。 有過開發經驗的都知道,當我們在一個系統上進行開發的時候,無論是Android,HarmonyOs,Linux 等等&a…

Redis解決緩存擊穿問題——兩種方法

目錄 引言 解決辦法 互斥鎖(強一致,性能差) 邏輯過期(高可用,性能優) 設計邏輯過期時間 引言 緩存擊穿:給某一個key設置了過期時間,當key過期的時候,恰好這個時間點對…

架構思維:軟件建模與架構設計的關鍵要點

文章目錄 1. 軟件建模的核心概念2. 七種常用UML圖及其應用場景類圖時序圖組件圖部署圖用例圖狀態圖活動圖 3. 軟件設計文檔的三階段結構4. 架構設計的關鍵實踐1. 用例圖:核心功能模塊2. 部署圖:架構演進階段3. 技術挑戰與解決方案4. 關鍵架構圖示例5. 架…

numpy學習筆記14:模擬隨機游走過程(一次實驗)

numpy學習筆記14:模擬隨機游走過程(一次實驗) 隨機游走是一個對象在離散時間步中的隨機移動,每次移動的方向和步長由概率決定。在用戶提供的代碼中,步長數組steps的每個元素是-1或1,代表向左或向右移動一步。np.random.choice的作…

FPGA-DE2115開發板實現流水燈

文章目錄 一、安裝VScode,在其中下載安裝Verilog-HDL/SystemVerilog插件;(1)安裝VScode(2)安裝插件(3)與Quartus關聯 二、不分模塊實現流水燈(1)新建工程&…

JS逆向案例-HIKVISION-視頻監控的前端密碼加密分析

免責聲明 本文僅為技術研究與滲透測試思路分享,旨在幫助安全從業人員更好地理解相關技術原理和防御措施。任何個人或組織不得利用本文內容從事非法活動或攻擊他人系統。 如果任何人因違反法律法規或不當使用本文內容而導致任何法律后果,本文作者概不負責。 請務必遵守法律…

Android 動態代理詳解

Android 動態代理方法的原理與關鍵分析 動態代理是一種在運行時動態生成代理對象并攔截方法調用的技術。它廣泛應用于 Android 開發中,例如 AOP(面向切面編程)、插件化開發、網絡請求框架(如 Retrofit)等場景。 以下…

碰一碰發視頻saas系統技術源頭一站式開發文檔

碰一碰發視頻系統技術源頭一站式開發文檔 一、引言 在數字化信息傳播高速發展的當下,如何讓視頻分享更便捷、高效,成為商家和開發者們關注的焦點。“碰一碰發視頻”系統以其獨特的交互方式和強大的功能優勢,為視頻分享領域帶來了革命性變革。…

VSCode + CMake

參考文獻: 如何用 GCC, CMake 和 Make 編譯C/C代碼Windows 上的 Linux 子系統:WSLWSL:桌面 UI 遠程連接 RDP 配置 VScode 文章目錄 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 編寫如下的 CmakeLists.t…

yolov5學習及手勢識別實戰

目錄 一、YOLOv5核心原理 1. 單階段檢測范式 2. 關鍵技術特性 二、YOLOv5網絡架構組成 1. Backbone:CSPDarknet53 2. Neck:PANet(Path Aggregation Network) 3. Head:檢測頭 三、YOLOv5網絡架構細節 1. 整體架…

【視頻】H.264的碼率和圖像質量

1、簡述 分辨率、幀率、I幀設置不變的情況下,碼率過低時,IP攝像機如果沒有足夠的帶寬來傳輸高質量的圖像,便會抹掉一些細節,導致出現馬賽克,尤其是動態性強的畫面(比如:運動的云臺、非固定的攝像頭)。 2、計算碼率 1)碼率的基礎理論公式為: 碼率 (bps) = 分辨率像…

VMware-workstation-17.6.3安裝教程

1.下載VMware-workstation-17.6.3軟件包 2.安裝并輸入許可碼 3.開始使用

[Linux][經驗總結]Ubuntu6.11.0 docker更換鏡像源(實操可用的正確方法)

一、前言 關于Ubuntu更換docker鏡像源,網上有很多的教程,但在實操中發現,更換的源無法生效——原因是我的docker是在系統安裝時,選擇附加安裝的package的方式安裝的。 現將處理過程記錄如下。 二、獲取鏡像源 在網上隨便找個幾…

Element Plus開發實戰指南:快速上手Vue 3企業級組件庫

Element Plus全棧開發指南:從入門到企業級實戰 一、環境搭建與工程配置1.1 項目初始化(Windows/Mac通用)1.2 配置文件關鍵代碼 二、主題定制與樣式管理2.1 SCSS變量覆蓋方案2.2 暗黑模式切換 三、核心組件深度實踐3.1 智能表格開發&#xff0…

Elasticsearch基礎教程:從入門到上手

🎯 一、Elasticsearch簡介 Elasticsearch(簡稱ES)是一個分布式、RESTful風格的搜索引擎,支持全文檢索、結構化查詢、分析和近實時搜索。常用于日志分析、商品搜索、數據分析等場景。 1. 什么是 Elasticsearch? Elas…

VIVO手機如何實現證件照換底色?證件照換底色技巧分享

在日常生活中,我們常常需要使用不同底色的證件照,無論是辦理證件、提交資料還是其他用途,一張符合要求的證件照都顯得尤為重要。 而VIVO手機憑借其強大的拍照功能和便捷的圖片編輯工具,為我們提供了一種簡單高效的證件照換底色解…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型語言模型的訓練后優化綜述——第一部分

arXiv 2025 摘要 大型語言模型(LLMs)的出現從根本上改變了自然語言處理,使其在從對話系統到科學研究的各個領域中變得不可或缺。然而,它們的預訓練架構在特定情境下經常顯示出局限性,包括有限的推理能力、倫理不確定…

深入理解Python閉包與遞歸:原理、應用與實踐

目錄 閉包 什么是閉包: 閉包的基本結構: 實現閉包的條件: 1.嵌套函數 2.內函數引用外部函數的變量 3.外部函數返回內部函數 4.外部函數已經執行完畢 遞歸函數 什么是遞歸函數: 遞歸函數條件 1.必須有個明確的結束條…

【自學筆記】智能合約基礎知識點總覽-持續更新

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 智能合約基礎知識點總覽目錄1. 智能合約簡介2. 以太坊與Solidity示例代碼:Hello World智能合約 3. Solidity基礎語法示例代碼:簡單的計數器合…